From 0949326f92e08cdb77c1075bb7a18b0178f9d5f6 Mon Sep 17 00:00:00 2001 From: Claudio Takahasi Date: Mon, 2 Apr 2012 09:56:36 -0400 Subject: [PATCH] gattrib: Protect GAttrib when there is a pending write --- attrib/gattrib.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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) -- 2.47.3