diff options
author | Amitay Isaacs <amitay@gmail.com> | 2013-04-02 16:57:51 +1100 |
---|---|---|
committer | Amitay Isaacs <amitay@gmail.com> | 2013-04-05 13:00:16 +1100 |
commit | 8788e6318c633f4a59da9dbf7ae8dfb0eee9be9c (patch) | |
tree | ed913cf87c83b1d54ba2a92a0a5bcf3af3608b2b /ctdb/common/ctdb_message.c | |
parent | 96ad89f438827b994ed841aca8a78bef4227da48 (diff) | |
download | samba-8788e6318c633f4a59da9dbf7ae8dfb0eee9be9c.tar.gz samba-8788e6318c633f4a59da9dbf7ae8dfb0eee9be9c.tar.xz samba-8788e6318c633f4a59da9dbf7ae8dfb0eee9be9c.zip |
common/messaging: Don't forget to free the result returned by tdb_fetch()
This fixes a memory leak in the messaging code.
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
(This used to be ctdb commit 20be1f991dd75c2333c9ec9db226432a819f57ba)
Diffstat (limited to 'ctdb/common/ctdb_message.c')
-rw-r--r-- | ctdb/common/ctdb_message.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/ctdb/common/ctdb_message.c b/ctdb/common/ctdb_message.c index 2152c88dc9a..297f86ba25b 100644 --- a/ctdb/common/ctdb_message.c +++ b/ctdb/common/ctdb_message.c @@ -110,6 +110,7 @@ int ctdb_dispatch_message(struct ctdb_context *ctdb, uint64_t srvid, TDB_DATA da ret = message_list_db_fetch(ctdb, key, &hdata); if (ret == 0) { h = *(struct ctdb_message_list_header **)hdata.dptr; + free(hdata.dptr); for (m=h->m; m; m=m->next) { m->message_handler(ctdb, srvid, data, m->message_private); @@ -122,6 +123,7 @@ int ctdb_dispatch_message(struct ctdb_context *ctdb, uint64_t srvid, TDB_DATA da ret = message_list_db_fetch(ctdb, key, &hdata); if (ret == 0) { h = *(struct ctdb_message_list_header **)hdata.dptr; + free(hdata.dptr); for(m=h->m; m; m=m->next) { m->message_handler(ctdb, srvid, data, m->message_private); @@ -227,6 +229,7 @@ int ctdb_register_message_handler(struct ctdb_context *ctdb, talloc_set_destructor(h, message_header_destructor); } else { h = *(struct ctdb_message_list_header **)data.dptr; + free(data.dptr); } m->h = h; @@ -255,6 +258,8 @@ int ctdb_deregister_message_handler(struct ctdb_context *ctdb, uint64_t srvid, v } h = *(struct ctdb_message_list_header **)data.dptr; + free(data.dptr); + for (m=h->m; m; m=m->next) { if (m->message_private == private_data) { talloc_free(m); @@ -282,6 +287,7 @@ bool ctdb_check_message_handler(struct ctdb_context *ctdb, uint64_t srvid) } h = *(struct ctdb_message_list_header **)data.dptr; + free(data.dptr); if (h->m == NULL) { return false; } |