pending->hdr.data = data;
memcpy(&pending->hdr.hdr, &buf->hdr, sizeof(buf->hdr));
memcpy(data, buf->data, blob_raw_len(buf->data));
- list_add(&pending->list, &ctx->pending);
+ list_add_tail(&pending->list, &ctx->pending);
if (ctx->sock.registered)
uloop_timeout_set(&ctx->pending_timer, 1);
}
ubus_process_obj_msg(ctx, buf);
break;
+ case UBUS_MSG_MONITOR:
+ if (ctx->monitor_cb)
+ ctx->monitor_cb(ctx, buf->hdr.seq, buf->data);
+ break;
}
}
avl_init(&ctx->objects, ubus_cmp_id, false, NULL);
if (ubus_reconnect(ctx, path)) {
free(ctx->msgbuf.data);
+ ctx->msgbuf.data = NULL;
return -1;
}
void ubus_shutdown(struct ubus_context *ctx)
{
blob_buf_free(&b);
+ if (!ctx)
+ return;
close(ctx->sock.fd);
free(ctx->msgbuf.data);
}