Hi Djalal,

>
OK thank you for the explanation. I did go with ref counting since
they are easy to use and I will follow up later with +UCGED which has
different behaviour depending on firmware version...


Sounds good.


I take a ref just before doing the g_at_chat_send() , however I call
unref in case g_at_chat_send() returns 0 and fails since in that case
the GDestroyNotify is still not registered and the command was not
queued...

That is fine. In general it might be simpler to have req_cb_data_ref initialize the ref count to 1. Saves you a call to ref()


Hmm so now maybe the leak may happen in this small window between:
cbd = req_cb_data_ref(cbd);
and
g_at_chat_send() and before registering the GDestroyNotify
parameter... in case hardware removal happens or anything... I'm not
sure and I also don't know how to fix it.

This is not possible. The hardware removal notification still comes over a socket, so regular event loop rules apply. The function invocation won't be interrupted mid-stream.

What we're worried about is us allocating memory, queuing the command into GAtChat, but at some point later, the GAtChat object is destroyed before the command callback was executed.

Regards,
-Denis
_______________________________________________
ofono mailing list
ofono@ofono.org
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to