oh, sorry for the chaos.
here it is:
#### bt_AFTER_patch.corefile
``` (gdb) frame 3 #3 0x00007fe5d724f9ea in free_pipe_cmd (cmd=0x7fe5dca4a1d0) at jsonrpc_io.c:551 551 shm_free(cmd->method); (gdb) l 546 547 548 void free_pipe_cmd(struct jsonrpc_pipe_cmd *cmd) 549 { 550 if (cmd->method) 551 shm_free(cmd->method); 552 if (cmd->params) 553 shm_free(cmd->params); 554 if (cmd->cb_route) 555 shm_free(cmd->cb_route); ```
#### below is my current diff between patched jsonrpc_io.c and 4.3.1 stable ( jsonrpc_io.c.orig )
``` --- jsonrpc_io.c.orig 2015-07-20 21:16:25.000000000 +0800 +++ jsonrpc_io.c 2015-08-26 13:25:24.628835993 +0800 @@ -85,8 +85,7 @@
if (!connect_servers(server_group)) { - LM_ERR("failed to connect to any servers\n"); - return -1; + LM_WARN("failed to connect to any servers\n"); }
event_dispatch(); @@ -163,7 +162,7 @@
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);
@@ -201,7 +200,7 @@
if (timerfd == -1) { LM_ERR("Could not create timerfd."); - return; + goto error; }
req->timerfd = timerfd; @@ -215,7 +214,7 @@ 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)); @@ -223,7 +222,7 @@ 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) { @@ -237,6 +236,10 @@
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) @@ -338,6 +341,7 @@
struct jsonrpc_server *server = pkg_malloc(sizeof(struct jsonrpc_server)); CHECK_MALLOC(server); + memset(server, 0, sizeof(struct jsonrpc_server)); char *h = pkg_malloc(strlen(host)+1); CHECK_MALLOC(h);
@@ -365,6 +369,7 @@
selected_group = pkg_malloc(sizeof(struct jsonrpc_server_group)); CHECK_MALLOC(selected_group); + memset(selected_group, 0, sizeof(struct jsonrpc_server_group)); selected_group->priority = priority; selected_group->next_server = server;
```
--- Reply to this email directly or view it on GitHub: https://github.com/kamailio/kamailio/issues/296#issuecomment-135039373