--- a/cmd.c Mon Aug 20 22:39:00 2012 +0300
+++ b/cmd.c Sun Feb 10 19:01:35 2013 +0200
@@ -119,7 +119,7 @@
}
if (chstat == G_IO_STATUS_ERROR || chstat == G_IO_STATUS_EOF) {
- cb->source = 0;
+
return FALSE; // XXX
}
@@ -195,13 +195,13 @@
scr_log_print (LPRINT_LOGNORM, "cmd: Character conversion error: %s", error->message);
g_error_free (error);
- cb->source = 0;
+
return FALSE;
}
}
} else if (condition & (G_IO_ERR|G_IO_NVAL|G_IO_HUP)) {
- cb->source = 0;
+
return FALSE; // XXX
}
@@ -214,10 +214,6 @@
cmd_channels = g_slist_remove (cmd_channels, data);
- if (cb->source)
- g_source_remove (cb->source);
- if (cb->channel)
- g_io_channel_unref (cb->channel);
if (cb -> subject)
g_free (cb -> subject);
g_free (cb->jid);
@@ -317,10 +313,14 @@
cb -> input = g_string_new (NULL);
cb -> seq = 0;
cb -> channel = channel;
+
+ cmd_channels = g_slist_append (cmd_channels, cb);
+
cb -> source = g_io_add_watch_full (channel, 0, G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
cmd_reader, (gpointer) cb, cmd_destroy_data);
- cmd_channels = g_slist_append (cmd_channels, cb);
+ g_io_channel_unref ( channel );
+
}
}
}
@@ -345,17 +345,12 @@
cmd_del (mcmd_cmid);
#endif
- for (sel = cmd_channels; sel; sel = sel->next) {
+ for (sel = cmd_channels; sel; ) {
cmd_cb_t *cb = (cmd_cb_t *) sel->data;
+ sel = sel -> next;
if (cb->source)
g_source_remove (cb->source);
- if (cb->channel)
- g_io_channel_unref (cb->channel);
- g_free (cb->jid);
- g_slice_free (cmd_cb_t, cb);
}
-
- g_slist_free (cmd_channels);
}
/* vim: se ts=4 sw=4: */