From: Claudio Takahasi Date: Mon, 2 Apr 2012 13:56:36 +0000 (-0400) Subject: gattrib: Protect GAttrib when there is a pending write X-Git-Tag: android-x86-4.4-r3~13370 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0949326f92e08cdb77c1075bb7a18b0178f9d5f6;p=android-x86%2Fexternal-bluetooth-bluez.git gattrib: Protect GAttrib when there is a pending write --- diff --git a/attrib/gattrib.c b/attrib/gattrib.c index 8a1e97b28..769be36ec 100644 --- a/attrib/gattrib.c +++ b/attrib/gattrib.c @@ -293,14 +293,18 @@ static void destroy_sender(gpointer data) struct _GAttrib *attrib = data; attrib->write_watch = 0; + g_attrib_unref(attrib); } static void wake_up_sender(struct _GAttrib *attrib) { - if (attrib->write_watch == 0) - attrib->write_watch = g_io_add_watch_full(attrib->io, - G_PRIORITY_DEFAULT, G_IO_OUT, can_write_data, - attrib, destroy_sender); + if (attrib->write_watch > 0) + return; + + attrib = g_attrib_ref(attrib); + attrib->write_watch = g_io_add_watch_full(attrib->io, + G_PRIORITY_DEFAULT, G_IO_OUT, + can_write_data, attrib, destroy_sender); } static gboolean received_data(GIOChannel *io, GIOCondition cond, gpointer data)