From: Andrew Tridgell Date: Wed, 16 May 2007 08:10:26 +0000 (+1000) Subject: - merge from ronnie X-Git-Tag: tevent-0.9.20~348^2~2723 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c105f6d78906c3d2d0ceffffc61a12d5be0fbabf;p=thirdparty%2Fsamba.git - merge from ronnie - fixed a memory leak found by dmitry (This used to be ctdb commit ae87bf0005666b50850161c3843d6bc7cb5c8971) --- c105f6d78906c3d2d0ceffffc61a12d5be0fbabf diff --cc ctdb/common/ctdb_call.c index 5416e711ff6,5416e711ff6..caeec8dc69d --- a/ctdb/common/ctdb_call.c +++ b/ctdb/common/ctdb_call.c @@@ -48,8 -48,8 +48,8 @@@ local version of ctdb_call */ int ctdb_call_local(struct ctdb_db_context *ctdb_db, struct ctdb_call *call, -- struct ctdb_ltdb_header *header, TDB_DATA *data, -- uint32_t caller) ++ struct ctdb_ltdb_header *header, TALLOC_CTX *mem_ctx, ++ TDB_DATA *data, uint32_t caller) { struct ctdb_call_info *c; struct ctdb_registered_call *fn; @@@ -322,12 -322,12 +322,10 @@@ static void ctdb_become_dmaster(struct return; } -- ctdb_call_local(ctdb_db, &state->call, &header, &data, ctdb->vnn); ++ ctdb_call_local(ctdb_db, &state->call, &header, state, &data, ctdb->vnn); ctdb_ltdb_unlock(ctdb_db, state->call.key); -- talloc_steal(state, state->call.reply_data.dptr); -- state->state = CTDB_CALL_DONE; if (state->async.fn) { state->async.fn(state); @@@ -477,7 -477,7 +475,7 @@@ void ctdb_request_call(struct ctdb_cont return; } -- ctdb_call_local(ctdb_db, &call, &header, &data, c->hdr.srcnode); ++ ctdb_call_local(ctdb_db, &call, &header, hdr, &data, c->hdr.srcnode); ctdb_ltdb_unlock(ctdb_db, call.key); @@@ -491,7 -491,7 +489,6 @@@ r->datalen = call.reply_data.dsize; if (call.reply_data.dsize) { memcpy(&r->data[0], call.reply_data.dptr, call.reply_data.dsize); -- talloc_free(call.reply_data.dptr); } ctdb_queue_packet(ctdb, &r->hdr); @@@ -694,8 -694,8 +691,7 @@@ struct ctdb_call_state *ctdb_call_local state->call = *call; state->ctdb_db = ctdb_db; -- ret = ctdb_call_local(ctdb_db, &state->call, header, data, ctdb->vnn); -- talloc_steal(state, state->call.reply_data.dptr); ++ ret = ctdb_call_local(ctdb_db, &state->call, header, state, data, ctdb->vnn); event_add_timed(ctdb->ev, state, timeval_zero(), call_local_trigger, state); diff --cc ctdb/common/ctdb_client.c index 044e38558e8,c178aa13ec1..d31ddd5861e --- a/ctdb/common/ctdb_client.c +++ b/ctdb/common/ctdb_client.c @@@ -264,8 -264,8 +264,7 @@@ static struct ctdb_client_call_state *c state->call = *call; state->ctdb_db = ctdb_db; -- ret = ctdb_call_local(ctdb_db, &state->call, header, data, ctdb->vnn); -- talloc_steal(state, state->call.reply_data.dptr); ++ ret = ctdb_call_local(ctdb_db, &state->call, header, state, data, ctdb->vnn); return state; } diff --cc ctdb/include/ctdb_private.h index 6710cd26f26,25097729c3c..ca045c18d1a --- a/ctdb/include/ctdb_private.h +++ b/ctdb/include/ctdb_private.h @@@ -680,7 -681,7 +681,7 @@@ struct ctdb_call_state *ctdb_daemon_cal void ctdb_request_finished(struct ctdb_context *ctdb, struct ctdb_req_header *hdr); int ctdb_call_local(struct ctdb_db_context *ctdb_db, struct ctdb_call *call, -- struct ctdb_ltdb_header *header, TDB_DATA *data, ++ struct ctdb_ltdb_header *header, TALLOC_CTX *mem_ctx, TDB_DATA *data, uint32_t caller); #define ctdb_reqid_find(ctdb, reqid, type) (type *)_ctdb_reqid_find(ctdb, reqid, #type, __location__)