Diff between bd379384451d725c0df547708c3a746599c9375a and 0949326f92e08cdb77c1075bb7a18b0178f9d5f6

Changed Files

File Additions Deletions Status
attrib/gattrib.c +8 -4 modified

Full Patch

diff --git a/attrib/gattrib.c b/attrib/gattrib.c
index 8a1e97b..769be36 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)