diff options
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/call-stub.c | 47 | ||||
| -rw-r--r-- | libglusterfs/src/call-stub.h | 2 | 
2 files changed, 49 insertions, 0 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c index 9ed2493e80b..c9c47b56c98 100644 --- a/libglusterfs/src/call-stub.c +++ b/libglusterfs/src/call-stub.c @@ -2538,3 +2538,50 @@ call_unwind_error (call_stub_t *stub, int op_ret, int op_errno)          return;  } + + +void +call_unwind_error_keep_stub (call_stub_t *stub, int op_ret, int op_errno) +{ +        xlator_t *old_THIS = NULL; + +        list_del_init (&stub->list); + +        old_THIS = THIS; +        THIS = stub->frame->this; +        { +                stub->args_cbk.op_ret = op_ret; +                stub->args_cbk.op_errno = op_errno; +                call_resume_unwind (stub); +        } + +        THIS = old_THIS; + +        return; + +} + +void +call_resume_keep_stub (call_stub_t *stub) +{ +        xlator_t *old_THIS = NULL; + +        errno = EINVAL; +        GF_VALIDATE_OR_GOTO ("call-stub", stub, out); + +        list_del_init (&stub->list); + +        old_THIS = THIS; +        THIS = stub->frame->this; +        { +                if (stub->wind) +                        call_resume_wind (stub); +                else +                        call_resume_unwind (stub); +        } + +        THIS = old_THIS; + +out: +        return; +} diff --git a/libglusterfs/src/call-stub.h b/libglusterfs/src/call-stub.h index 5779ee36e58..300b5935767 100644 --- a/libglusterfs/src/call-stub.h +++ b/libglusterfs/src/call-stub.h @@ -763,8 +763,10 @@ fop_setactivelk_cbk_stub (call_frame_t *frame, fop_setactivelk_cbk_t fn,                             int32_t op_ret, int32_t op_errno, dict_t *xdata);  void call_resume (call_stub_t *stub); +void call_resume_keep_stub (call_stub_t *stub);  void call_stub_destroy (call_stub_t *stub);  void call_unwind_error (call_stub_t *stub, int op_ret, int op_errno); +void call_unwind_error_keep_stub (call_stub_t *stub, int op_ret, int op_errno);  /*   * Sometimes we might want to call just this, perhaps repeatedly, without  | 
