diff options
| -rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.h | 16 | 
2 files changed, 17 insertions, 1 deletions
diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index e54f9c2cbec..e766b65cdc8 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -399,7 +399,7 @@ afr_changelog_post_op_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (call_count == 0) {                  if (local->transaction.resume_stub) { -                        call_resume (local->transaction.resume_stub); +			AFR_CALL_RESUME (local->transaction.resume_stub);                          local->transaction.resume_stub = NULL;                  } diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 878dbd7ba9d..24bd20f136b 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -923,6 +923,22 @@ afr_launch_openfd_self_heal (call_frame_t *frame, xlator_t *this, fd_t *fd);                  }                                               \          } while (0); +#define AFR_CALL_RESUME(stub)					\ +        do {                                                    \ +                afr_local_t *__local = NULL;                    \ +                xlator_t    *__this = NULL;                     \ +								\ +		__local = stub->frame->local;			\ +		__this = stub->frame->this;			\ +		stub->frame->local = NULL;			\ +								\ +		call_resume (stub);				\ +                if (__local) {                                  \ +                        afr_local_cleanup (__local, __this);    \ +                        mem_put (__local);                      \ +                }                                               \ +        } while (0) +  #define AFR_NUM_CHANGE_LOGS            3 /*data + metadata + entry*/  /* allocate and return a string that is the basename of argument */  static inline char *  | 
