diff options
| -rw-r--r-- | api/src/glfs.c | 12 | ||||
| -rw-r--r-- | libglusterfs/src/mem-pool.c | 18 | 
2 files changed, 22 insertions, 8 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index 5c77a63d101..0eb25a222de 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -745,6 +745,12 @@ pub_glfs_new (const char *volname)                  return NULL;          } +        /* +         * Do this as soon as possible in case something else depends on +         * pool allocations. +         */ +        mem_pools_init (); +          fs = glfs_new_fs (volname);          if (!fs)                  return NULL; @@ -1026,12 +1032,6 @@ pub_glfs_init (struct glfs *fs)  		return ret;  	} -        /* -         * Do this as soon as possible in case something else depends on -         * pool allocations. -         */ -        mem_pools_init (); -          __GLFS_ENTRY_VALIDATE_FS (fs, invalid_fs);  	ret = glfs_init_common (fs); diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c index e116437583e..456eb68c060 100644 --- a/libglusterfs/src/mem-pool.c +++ b/libglusterfs/src/mem-pool.c @@ -560,10 +560,24 @@ void  mem_pools_fini (void)  {          pthread_mutex_lock (&init_mutex); -        GF_ASSERT (init_count > 0); -        if ((--init_count) == 0) { +        switch (init_count) { +        case 0: +                /* +                 * If init_count is already zero (as e.g. if somebody called +                 * this before mem_pools_init) then the sweeper was probably +                 * never even started so we don't need to stop it.  Even if +                 * there's some crazy circumstance where there is a sweeper but +                 * init_count is still zero, that just means we'll leave it +                 * running.  Not perfect, but far better than any known +                 * alternative. +                 */ +                break; +        case 1:                  (void) pthread_cancel (sweeper_tid);                  (void) pthread_join (sweeper_tid, NULL); +                /* Fall through. */ +        default: +                --init_count;          }          pthread_mutex_unlock (&init_mutex);  }  | 
