Module: kamailio Branch: master Commit: 79459d3f87731309641794a2b881ee1cacc5e1f2 URL: https://github.com/kamailio/kamailio/commit/79459d3f87731309641794a2b881ee1c...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2015-08-25T15:53:02+02:00
jsonrpc-c: free pipe cmd for notifications
- fixes leak reported by GH#296
---
Modified: modules/jsonrpc-c/jsonrpc_io.c
---
Diff: https://github.com/kamailio/kamailio/commit/79459d3f87731309641794a2b881ee1c... Patch: https://github.com/kamailio/kamailio/commit/79459d3f87731309641794a2b881ee1c...
---
diff --git a/modules/jsonrpc-c/jsonrpc_io.c b/modules/jsonrpc-c/jsonrpc_io.c index 9acc149..42d16be 100644 --- a/modules/jsonrpc-c/jsonrpc_io.c +++ b/modules/jsonrpc-c/jsonrpc_io.c @@ -165,7 +165,7 @@ void cmd_pipe_cb(int fd, short event, void *arg)
if (!payload) { LM_ERR("Failed to build jsonrpc_request_t (method: %s, params: %s)\n", cmd->method, cmd->params); - return; + goto error; } char *json = (char*)json_object_get_string(payload);
@@ -203,7 +203,7 @@ void cmd_pipe_cb(int fd, short event, void *arg)
if (timerfd == -1) { LM_ERR("Could not create timerfd."); - return; + goto error; }
req->timerfd = timerfd; @@ -217,7 +217,7 @@ void cmd_pipe_cb(int fd, short event, void *arg) if (timerfd_settime(timerfd, 0, itime, NULL) == -1) { LM_ERR("Could not set timer."); - return; + goto error; } pkg_free(itime); struct event *timer_ev = pkg_malloc(sizeof(struct event)); @@ -225,7 +225,7 @@ void cmd_pipe_cb(int fd, short event, void *arg) event_set(timer_ev, timerfd, EV_READ, timeout_cb, req); if(event_add(timer_ev, NULL) == -1) { LM_ERR("event_add failed while setting request timer (%s).", strerror(errno)); - return; + goto error; } req->timer_ev = timer_ev; } else if (!sent) { @@ -239,6 +239,10 @@ void cmd_pipe_cb(int fd, short event, void *arg)
pkg_free(ns); json_object_put(payload); + if (cmd->notify_only) free_pipe_cmd(cmd); +error: + if (cmd->notify_only) free_pipe_cmd(cmd); + return; }
void socket_cb(int fd, short event, void *arg)