------------------------------------------------------------ revno: 335 revision-id: [EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: Andrew Tridgell <[EMAIL PROTECTED]> branch nick: tridge timestamp: Wed 2007-05-23 20:06:37 +1000 message: fixed some memory leaks on the traverse code modified: common/ctdb.c ctdb.c-20061127094323-t50f58d65iaao5of-2 common/ctdb_traverse.c ctdb_traverse.c-20070503021550-ztfs5rwx8jfm8qqx-1 tools/ctdb_control.c ctdb_control.c-20070426122705-9ehj1l5lu2gn9kuj-1 === modified file 'common/ctdb.c' --- a/common/ctdb.c 2007-05-23 04:50:41 +0000 +++ b/common/ctdb.c 2007-05-23 10:06:37 +0000 @@ -437,6 +437,7 @@ { struct queue_next *q = talloc_get_type(private_data, struct queue_next); ctdb_input_pkt(q->ctdb, q->hdr); + talloc_free(q); } /*
=== modified file 'common/ctdb_traverse.c' --- a/common/ctdb_traverse.c 2007-05-17 13:23:41 +0000 +++ b/common/ctdb_traverse.c 2007-05-23 10:06:37 +0000 @@ -277,6 +277,7 @@ struct traverse_all_state *state = talloc_get_type(p, struct traverse_all_state); int ret; struct ctdb_rec_data *d; + TDB_DATA cdata; d = ctdb_marshall_record(state, state->reqid, key, data); if (d == NULL) { @@ -285,14 +286,19 @@ return; } - data.dptr = (uint8_t *)d; - data.dsize = d->length; + cdata.dptr = (uint8_t *)d; + cdata.dsize = d->length; ret = ctdb_daemon_send_control(state->ctdb, state->srcnode, 0, CTDB_CONTROL_TRAVERSE_DATA, - 0, CTDB_CTRL_FLAG_NOREPLY, data, NULL, NULL); + 0, CTDB_CTRL_FLAG_NOREPLY, cdata, NULL, NULL); if (ret != 0) { DEBUG(0,("Failed to send traverse data\n")); } + + if (key.dsize == 0 && data.dsize == 0) { + /* we're done */ + talloc_free(state); + } } /* @@ -397,6 +403,7 @@ { struct traverse_start_state *state; struct ctdb_rec_data *d; + TDB_DATA cdata; state = talloc_get_type(p, struct traverse_start_state); @@ -405,10 +412,10 @@ return; } - data.dptr = (uint8_t *)d; - data.dsize = d->length; + cdata.dptr = (uint8_t *)d; + cdata.dsize = d->length; - ctdb_dispatch_message(state->ctdb, state->srvid, data); + ctdb_dispatch_message(state->ctdb, state->srvid, cdata); if (key.dsize == 0 && data.dsize == 0) { /* end of traverse */ talloc_free(state); === modified file 'tools/ctdb_control.c' --- a/tools/ctdb_control.c 2007-05-20 23:24:34 +0000 +++ b/tools/ctdb_control.c 2007-05-23 10:06:37 +0000 @@ -59,6 +59,7 @@ " setmonmode <vnn> <mode> set monitoring mode\n" " attach <dbname> attach a database\n" " getpid <vnn> get the pid of a ctdb daemon\n" + " dumpmemory <vnn|all> dump memory map to log\n" " shutdown <vnn> shutdown a remote ctdb\n" " freeze <vnn|all> freeze a node\n" " thaw <vnn|all> thaw a node\n"