------------------------------------------------------------
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"