BUG#21671 memory leak for mgmapi event listeners

fixes the following valgrind warning (when running ndb_mgm under valgrind,
or, indeed any other mgmapi program listening to events):

==23291== 190 (20 direct, 170 indirect) bytes in 1 blocks are definitely lost in loss record 13 of 22
==23291==    at 0x401C895: operator new(unsigned) (vg_replace_malloc.c:163)
==23291==    by 0x8075300: ParserImpl::run(Parser<ParserImpl::Dummy>::Context*, Properties const**, bool volatile*) const (Parser.cpp:178)
==23291==    by 0x806D09B: Parser<ParserDummy>::parse(Parser<ParserDummy>::Context&, ParserDummy&) (Parser.hpp:219)
==23291==    by 0x80671C4: ndb_mgm_call(ndb_mgm_handle*, ParserRow<ParserDummy> const*, char const*, Properties const*) (mgmapi.cpp:355)
==23291==    by 0x806AB79: ndb_mgm_listen_event_internal(ndb_mgm_handle*, int const*, int) (mgmapi.cpp:1419)
==23291==    by 0x806AC1F: ndb_mgm_listen_event (mgmapi.cpp:1434)
==23291==    by 0x805EB5D: event_thread_run(void*) (CommandInterpreter.cpp:467)
==23291==    by 0x806F70A: ndb_thread_wrapper (NdbThread.c:68)
==23291==    by 0x4042340: start_thread (in /lib/tls/i686/cmov/libpthread-2.3.6.so)
==23291==    by 0x429D4ED: clone (in /lib/tls/i686/cmov/libc-2.3.6.so)
parent 76940119
...@@ -1389,7 +1389,7 @@ ndb_mgm_listen_event_internal(NdbMgmHandle handle, const int filter[], ...@@ -1389,7 +1389,7 @@ ndb_mgm_listen_event_internal(NdbMgmHandle handle, const int filter[],
MGM_END() MGM_END()
}; };
CHECK_HANDLE(handle, -1); CHECK_HANDLE(handle, -1);
const char *hostname= ndb_mgm_get_connected_host(handle); const char *hostname= ndb_mgm_get_connected_host(handle);
int port= ndb_mgm_get_connected_port(handle); int port= ndb_mgm_get_connected_port(handle);
SocketClient s(hostname, port); SocketClient s(hostname, port);
...@@ -1411,19 +1411,20 @@ ndb_mgm_listen_event_internal(NdbMgmHandle handle, const int filter[], ...@@ -1411,19 +1411,20 @@ ndb_mgm_listen_event_internal(NdbMgmHandle handle, const int filter[],
} }
args.put("filter", tmp.c_str()); args.put("filter", tmp.c_str());
} }
int tmp = handle->socket; int tmp = handle->socket;
handle->socket = sockfd; handle->socket = sockfd;
const Properties *reply; const Properties *reply;
reply = ndb_mgm_call(handle, stat_reply, "listen event", &args); reply = ndb_mgm_call(handle, stat_reply, "listen event", &args);
handle->socket = tmp; handle->socket = tmp;
if(reply == NULL) { if(reply == NULL) {
close(sockfd); close(sockfd);
CHECK_REPLY(reply, -1); CHECK_REPLY(reply, -1);
} }
delete reply;
return sockfd; return sockfd;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment