------------------------------------------------------------ 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);