diff options
Diffstat (limited to 'libglusterfs/src/globals.c')
| -rw-r--r-- | libglusterfs/src/globals.c | 57 | 
1 files changed, 56 insertions, 1 deletions
diff --git a/libglusterfs/src/globals.c b/libglusterfs/src/globals.c index 05ff52c2c..8009fb00c 100644 --- a/libglusterfs/src/globals.c +++ b/libglusterfs/src/globals.c @@ -19,6 +19,7 @@  #include "globals.h"  #include "xlator.h"  #include "mem-pool.h" +#include "syncop.h"  const char *gf_fop_list[GF_FOP_MAXVALUE] = {          [GF_FOP_NULL]        = "NULL", @@ -164,6 +165,54 @@ glusterfs_this_set (xlator_t *this)          return 0;  } +/* SYNCOPCTX */ +static pthread_key_t syncopctx_key; + +static void +syncopctx_key_destroy (void *ptr) +{ +	struct syncopctx *opctx = ptr; + +	if (opctx) { +		if (opctx->groups) +			GF_FREE (opctx->groups); + +		GF_FREE (opctx); +	} + +	return; +} + +void * +syncopctx_getctx () +{ +	void *opctx = NULL; + +	opctx = pthread_getspecific (syncopctx_key); + +	return opctx; +} + +int +syncopctx_setctx (void *ctx) +{ +	int ret = 0; + +	ret = pthread_setspecific (syncopctx_key, ctx); + +	return ret; +} + +static int +syncopctx_init (void) +{ +	int ret; + +	ret = pthread_key_create (&syncopctx_key, syncopctx_key_destroy); + +	return ret; +} +  /* SYNCTASK */  int @@ -176,7 +225,6 @@ synctask_init ()          return ret;  } -  void *  synctask_get ()  { @@ -300,6 +348,13 @@ glusterfs_globals_init (glusterfs_ctx_t *ctx)                          "ERROR: glusterfs synctask init failed");                  goto out;          } + +        ret = syncopctx_init (); +        if (ret) { +                gf_log ("", GF_LOG_CRITICAL, +                        "ERROR: glusterfs syncopctx init failed"); +                goto out; +        }  out:          return ret;  }  | 
