libubus: fix a small memleak in ubus_register_event_handler()
[project/ubus.git] / libubus.c
index 83a2c43..e42f14f 100644 (file)
--- a/libubus.c
+++ b/libubus.c
@@ -243,8 +243,11 @@ int ubus_register_event_handler(struct ubus_context *ctx,
        if (pattern)
                blobmsg_add_string(&b2, "pattern", pattern);
 
        if (pattern)
                blobmsg_add_string(&b2, "pattern", pattern);
 
-       return ubus_invoke(ctx, UBUS_SYSTEM_OBJECT_EVENT, "register", b2.head,
+       ret = ubus_invoke(ctx, UBUS_SYSTEM_OBJECT_EVENT, "register", b2.head,
                          NULL, NULL, 0);
                          NULL, NULL, 0);
+       blob_buf_free(&b2);
+
+       return ret;
 }
 
 int ubus_send_event(struct ubus_context *ctx, const char *id,
 }
 
 int ubus_send_event(struct ubus_context *ctx, const char *id,
@@ -280,9 +283,10 @@ static int _ubus_connect(struct ubus_context *ctx, const char *path)
        ctx->connection_lost = ubus_default_connection_lost;
        ctx->pending_timer.cb = ubus_process_pending_msg;
 
        ctx->connection_lost = ubus_default_connection_lost;
        ctx->pending_timer.cb = ubus_process_pending_msg;
 
-       ctx->msgbuf.data = calloc(UBUS_MAX_MSGLEN, sizeof(char));
+       ctx->msgbuf.data = calloc(UBUS_MSG_CHUNK_SIZE, sizeof(char));
        if (!ctx->msgbuf.data)
                return -1;
        if (!ctx->msgbuf.data)
                return -1;
+       ctx->msgbuf_data_len = UBUS_MSG_CHUNK_SIZE;
 
        INIT_LIST_HEAD(&ctx->requests);
        INIT_LIST_HEAD(&ctx->pending);
 
        INIT_LIST_HEAD(&ctx->requests);
        INIT_LIST_HEAD(&ctx->pending);