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.