diff options
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/syncop.c | 29 | ||||
| -rw-r--r-- | libglusterfs/src/syncop.h | 10 | 
2 files changed, 29 insertions, 10 deletions
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c index f56a21d11b9..9b0d7aa745a 100644 --- a/libglusterfs/src/syncop.c +++ b/libglusterfs/src/syncop.c @@ -437,8 +437,8 @@ synctask_setid (struct synctask *task, uid_t uid, gid_t gid)  struct synctask * -synctask_create (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk, -		 call_frame_t *frame, void *opaque) +synctask_create (struct syncenv *env, size_t stacksize, synctask_fn_t fn, +                 synctask_cbk_t cbk, call_frame_t *frame, void *opaque)  {          struct synctask *newtask = NULL;          xlator_t        *this    = THIS; @@ -493,13 +493,21 @@ synctask_create (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk,                  goto err;          } -        newtask->stack = GF_CALLOC (1, env->stacksize, gf_common_mt_syncstack); +        if (stacksize <= 0) { +                newtask->stack = GF_CALLOC (1, env->stacksize, +                                            gf_common_mt_syncstack); +                newtask->ctx.uc_stack.ss_size = env->stacksize; +        } else { +                newtask->stack = GF_CALLOC (1, stacksize, +                                            gf_common_mt_syncstack); +                newtask->ctx.uc_stack.ss_size = stacksize; +        } +          if (!newtask->stack) {                  goto err;          }          newtask->ctx.uc_stack.ss_sp   = newtask->stack; -        newtask->ctx.uc_stack.ss_size = env->stacksize;          makecontext (&newtask->ctx, (void (*)(void)) synctask_wrap, 2, newtask); @@ -554,13 +562,13 @@ synctask_join (struct synctask *task)  int -synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk, -              call_frame_t *frame, void *opaque) +synctask_new1 (struct syncenv *env, size_t stacksize, synctask_fn_t fn, +                synctask_cbk_t cbk, call_frame_t *frame, void *opaque)  {  	struct synctask *newtask = NULL;  	int              ret = 0; -	newtask = synctask_create (env, fn, cbk, frame, opaque); +	newtask = synctask_create (env, stacksize, fn, cbk, frame, opaque);  	if (!newtask)  		return -1; @@ -571,6 +579,13 @@ synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk,  } +int +synctask_new (struct syncenv *env, synctask_fn_t fn, synctask_cbk_t cbk, +              call_frame_t *frame, void *opaque) +{ +        return synctask_new1 (env, 0, fn, cbk, frame, opaque); +} +  struct synctask *  syncenv_task (struct syncproc *proc)  { diff --git a/libglusterfs/src/syncop.h b/libglusterfs/src/syncop.h index 7779fada109..2cdedc0fc11 100644 --- a/libglusterfs/src/syncop.h +++ b/libglusterfs/src/syncop.h @@ -259,9 +259,13 @@ struct syncenv * syncenv_new (size_t stacksize, int procmin, int procmax);  void syncenv_destroy (struct syncenv *);  void syncenv_scale (struct syncenv *env); -int synctask_new (struct syncenv *, synctask_fn_t, synctask_cbk_t, call_frame_t* frame, void *); -struct synctask *synctask_create (struct syncenv *, synctask_fn_t, -				  synctask_cbk_t, call_frame_t *, void *); +int synctask_new1 (struct syncenv *, size_t stacksize, synctask_fn_t, +                    synctask_cbk_t, call_frame_t *frame, void *); +int synctask_new (struct syncenv *, synctask_fn_t, synctask_cbk_t, +                  call_frame_t *frame, void *); +struct synctask *synctask_create (struct syncenv *, size_t stacksize, +                                  synctask_fn_t, synctask_cbk_t, call_frame_t *, +                                  void *);  int synctask_join (struct synctask *task);  void synctask_wake (struct synctask *task);  void synctask_yield (struct synctask *task);  | 
