------------------------------------------------------------
revno: 298
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
branch nick: tridge
timestamp: Mon 2007-05-14 14:01:33 +1000
message:
  we must not free the fde until after we no longer need the lock child
modified:
  common/ctdb_lockwait.c         
ctdb_lockwait.c-20070416214118-n1aeonljj3vpdd9q-1
=== modified file 'common/ctdb_lockwait.c'
--- a/common/ctdb_lockwait.c    2007-05-14 03:49:01 +0000
+++ b/common/ctdb_lockwait.c    2007-05-14 04:01:33 +0000
@@ -51,14 +51,17 @@
        struct tdb_context *tdb = h->ctdb_db->ltdb->tdb;
        TALLOC_CTX *tmp_ctx = talloc_new(ev);
 
-       talloc_free(fde);
-
        key.dptr = talloc_memdup(tmp_ctx, key.dptr, key.dsize);
 
        talloc_set_destructor(h, NULL);
        ctdb_latency(&h->ctdb->status.max_lockwait_latency, h->start_time);
        h->ctdb->status.pending_lockwait_calls--;
 
+       /* the fde needs to go away when the context is gone - when
+          the fde goes away this implicitly closes the pipe, which
+          kills the child holding the lock */
+       talloc_steal(tmp_ctx, fde);
+
        tdb_chainlock_mark(tdb, key);
        callback(p);
        tdb_chainlock_unmark(tdb, key);

Reply via email to