qulogic/libgnt

propagate from branch 'im.pidgin.pidgin' (head f7da545aa702fa86405114e371d99c0e3a445d44)
to branch 'im.pidgin.pidgin.next.minor' (head e63f551129d9bae50c42434a1f62f62fd5f02482)
  • +12 -4
    gntmain.c
  • --- a/gntmain.c Wed Aug 19 00:54:27 2009 +0000
    +++ b/gntmain.c Wed Sep 16 15:41:33 2009 +0000
    @@ -69,7 +69,8 @@
    */
    static GIOChannel *channel = NULL;
    -static int channel_read_callback;
    +static guint channel_read_callback = 0;
    +static guint channel_error_callback = 0;
    static gboolean ascii_only;
    static gboolean mouse_enabled;
    @@ -314,11 +315,11 @@
    channel_read_callback = result = g_io_add_watch_full(channel, G_PRIORITY_HIGH,
    (G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI),
    io_invoke, NULL, NULL);
    -
    - g_io_add_watch_full(channel, G_PRIORITY_HIGH,
    +
    + channel_error_callback = g_io_add_watch_full(channel, G_PRIORITY_HIGH,
    (G_IO_NVAL),
    io_invoke_error, GINT_TO_POINTER(result), NULL);
    -
    +
    g_io_channel_unref(channel); /* Apparently this caused crashes for some people.
    But irssi does this, so I am going to assume the
    crashes were caused by some other stuff. */
    @@ -583,6 +584,13 @@
    void gnt_quit()
    {
    + /* Prevent io_invoke() from being called after wm is destroyed */
    + g_source_remove(channel_error_callback);
    + g_source_remove(channel_read_callback);
    +
    + channel_error_callback = 0;
    + channel_read_callback = 0;
    +
    g_object_unref(G_OBJECT(wm));
    wm = NULL;