]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: make safe and complete callback arguments separate
authorSage Weil <sage@inktank.com>
Fri, 23 Aug 2013 21:56:12 +0000 (14:56 -0700)
committerSage Weil <sage@inktank.com>
Fri, 23 Aug 2013 21:56:23 +0000 (14:56 -0700)
Fixes: #2914
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
src/librados/AioCompletionImpl.h

index cf049e0a9a213ab05b69536cf5c1dd2f377f359b..a40282a7c25388cd49dfc7fe381e793b0367e31e 100644 (file)
@@ -35,7 +35,7 @@ struct librados::AioCompletionImpl {
   eversion_t objver;
 
   rados_callback_t callback_complete, callback_safe;
-  void *callback_arg;
+  void *callback_complete_arg, *callback_safe_arg;
 
   // for read
   bool is_read;
@@ -49,21 +49,24 @@ struct librados::AioCompletionImpl {
 
   AioCompletionImpl() : lock("AioCompletionImpl lock", false, false),
                        ref(1), rval(0), released(false), ack(false), safe(false),
-                       callback_complete(0), callback_safe(0), callback_arg(0),
+                       callback_complete(0),
+                       callback_safe(0),
+                       callback_complete_arg(0),
+                       callback_safe_arg(0),
                        is_read(false), pbl(0), buf(0), maxlen(0),
                        io(NULL), aio_write_seq(0), aio_write_list_item(this) { }
 
   int set_complete_callback(void *cb_arg, rados_callback_t cb) {
     lock.Lock();
     callback_complete = cb;
-    callback_arg = cb_arg;
+    callback_complete_arg = cb_arg;
     lock.Unlock();
     return 0;
   }
   int set_safe_callback(void *cb_arg, rados_callback_t cb) {
     lock.Lock();
     callback_safe = cb;
-    callback_arg = cb_arg;
+    callback_safe_arg = cb_arg;
     lock.Unlock();
     return 0;
   }
@@ -171,7 +174,7 @@ struct C_AioComplete : public Context {
 
   void finish(int r) {
     rados_callback_t cb = c->callback_complete;
-    void *cb_arg = c->callback_arg;
+    void *cb_arg = c->callback_complete_arg;
     cb(c, cb_arg);
 
     c->lock.Lock();
@@ -190,7 +193,7 @@ struct C_AioSafe : public Context {
 
   void finish(int r) {
     rados_callback_t cb = c->callback_safe;
-    void *cb_arg = c->callback_arg;
+    void *cb_arg = c->callback_safe_arg;
     cb(c, cb_arg);
 
     c->lock.Lock();
@@ -222,13 +225,14 @@ struct C_AioCompleteAndSafe : public Context {
     c->safe = true;
     c->lock.Unlock();
     rados_callback_t cb_complete = c->callback_complete;
-    void *cb_arg = c->callback_arg;
+    void *cb_complete_arg = c->callback_complete_arg;
     if (cb_complete)
-      cb_complete(c, cb_arg);
+      cb_complete(c, cb_complete_arg);
 
     rados_callback_t cb_safe = c->callback_safe;
+    void *cb_safe_arg = c->callback_safe_arg;
     if (cb_safe)
-      cb_safe(c, cb_arg);
+      cb_safe(c, cb_safe_arg);
 
     c->lock.Lock();
     c->callback_complete = NULL;