<div dir="auto">Hey!<br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On 14.4.2020 17.55, Teijo Kinnunen wrote:<br>
<br>
> Possibly this could also be something in qmi-proxy side. I assume it is <br>
> expected that even after MM disconnects from it, it's supposed to <br>
> execute all queued QMI operations. Looking at the code, it seems that if <br>
> sending the response from device_command_ready() fails for the first of <br>
> the QMI Release CID operations (which sounds plausible, in case MM has <br>
> disconnected), untrack_client() gets called and it may close the QMI <br>
> device, blocking the execution of the remaining QMI commands.<br>
> <br>
> I didn't actually debug it yet to find out if this is what really <br>
> happens, but maybe I can look at it tomorrow.<br>
<br>
OK, got it sorted now. What happens between MM and qmi-proxy is as follows:<br>
- MM sends 6x Release CID to qmi-proxy (using libqmi) and disconnects<br>
   immediately (qmi_device_close_async).<br>
- The socket handler in qmi-proxy (connection_readable_cb) receives<br>
   these messages in two batches. The first batch contains 2...3<br>
   Release CID messages (which are processed OK) and the second batch<br>
   contains the remaining ones. The second call has *both* G_IO_IN and<br>
   G_IO_HUP set. As connection_readable_cb() processes G_IO_HUP first, it<br>
   will never get to handle the remaining Release CID messages.<br>
   => This leads to CID leak.<br>
<br>
So it looks like this could be fixed most easily in qmi-proxy. I will<br>
post a patch candidate for review/merging to libqmi project soon...<br></blockquote></div><div dir="auto"><br></div><div dir="auto">That makes sense, and the patch is likely an easy one :) thanks for debugging this.</div><div dir="auto"><br></div><div dir="auto"><br></div><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"></blockquote></div></div>