diff options
| -rw-r--r-- | api/src/glfs.c | 13 | ||||
| -rw-r--r-- | libglusterfs/src/timer.c | 16 | 
2 files changed, 21 insertions, 8 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index 02a8984f450..8bd410c716d 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -664,7 +664,9 @@ priv_glfs_free_from_ctx (struct glfs *fs)          (void) pthread_mutex_destroy (&fs->mutex); -        FREE (fs->volname); +        if (fs->volname) +                FREE (fs->volname); +          FREE (fs);  } @@ -934,13 +936,17 @@ pub_glfs_fini (struct glfs *fs)          }          ctx = fs->ctx; +        if (!ctx) { +                goto free_fs; +        } + +        __glfs_entry_fs (fs); +          if (ctx->mgmt) {                  rpc_clnt_disable (ctx->mgmt);                  ctx->mgmt = NULL;          } -        __glfs_entry_fs (fs); -          call_pool = fs->ctx->pool;          while (countdown--) { @@ -1069,6 +1075,7 @@ pub_glfs_fini (struct glfs *fs)          if (glusterfs_ctx_destroy (ctx) != 0)                  ret = -1; +free_fs:          glfs_free_from_ctx (fs);  fail: diff --git a/libglusterfs/src/timer.c b/libglusterfs/src/timer.c index 928b3681c89..cc47db3b9e1 100644 --- a/libglusterfs/src/timer.c +++ b/libglusterfs/src/timer.c @@ -141,6 +141,7 @@ gf_timer_proc (void *ctx)          gf_timer_registry_t *reg = NULL;          const struct timespec sleepts = {.tv_sec = 1, .tv_nsec = 0, };          gf_timer_t *event = NULL; +        xlator_t   *old_THIS = NULL;          if (ctx == NULL)          { @@ -174,11 +175,16 @@ gf_timer_proc (void *ctx)                                  }                          }                          pthread_mutex_unlock (®->lock); -                        if (event->xl) -                                THIS = event->xl; -                        if (need_cbk) -                                event->callbk  (event->data); - +                        if (need_cbk) { +                                if (event->xl) { +                                        old_THIS = THIS; +                                        THIS = event->xl; +                                } +                                event->callbk (event->data); +                                if (event->xl) { +                                        THIS = old_THIS; +                                } +                        }                          else                                  break;                  }  | 
