[OpenWrt-Devel] Question about conflict between ubus_invoke and uloop_run

XiaoFengMeng xiaofeng.meng at pfsw.com
Thu Apr 2 22:24:11 EDT 2015

HI !
I am Kevin and learning the ubus code and got something that is confusing me very much in the code.

My question is regarding code in  ubus_invoke -> ubus_complete_request,

I can see that there are lots of uloop related code in  "ubus_complete_request"
if (!registered) {
while (!req->status_msg) {
                                bool cancelled = uloop_cancelled;

                                uloop_cancelled = false;
                                if (req_timeout) {
                                                timeout = time_end - get_time_msec();
                                                if (timeout <= 0) {
                                                                ubus_set_req_status(req, UBUS_STATUS_TIMEOUT);
                                ubus_poll_data(ctx, (unsigned int) timeout);

                                uloop_cancelled = cancelled;

My question is why is uloop involved here?  uloop could be working in another thread and also listen on the same socket.
I idea that, before the ubus_invoke sends the request messge, it should disable the uloop for the current socket, so that code in uloop_run will not receive anything from the same socket.

Because after calling ubus_add_uloop(ctx), the uloop_run could also be receiving the response data
And this function could cause the uloop_run to quit the while loop.
How should I understand the logic here?

And How should I do if I want to call ubus_invoke as a client and use uloop_run as a server at  the same process?

Thanks very much!

Best regards

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20150403/f935abbd/attachment.htm>
-------------- next part --------------
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org

More information about the openwrt-devel mailing list