I met a strange problem: after dispose ( or during dispose) g_object_ref
could also succeed! http://pastebin.com/d631246a7

It crashes on line 24, which is almost impossible.

1st, I checked these variables.
2nd, I called g_object_ref(self) to avoid self being disposed while this
function has not returned.

The only explanation is that : after dispose is called but before finalize
is called, g_object_ref still could succeed!

Is that true?


   1. static gboolean vivs_net_inspiration_on_recv(GIOChannel *source,
   GIOCondition condition, gpointer data)
   2. {
   3.     VivsNetInspiration* self = VIVS_NET_INSPIRATION(data);
   4.
   5.     if(!g_object_ref(self))
   6.         return FALSE;
   7.
   8.     g_mutex_lock(self->priv->lock);
   9.
   10.     gsize   length = 0;
   11.     GError* err = NULL;
   12.
   13.     if(self->priv->channel && self->priv->composition)
   14.     {
   15.         GIOStatus status =  g_io_channel_read_chars(
   self->priv->channel,
   16.                     self->priv->pkt_buffer, MAX_PKT_LEN, &length,
   &err);
   17.         if(G_IO_STATUS_NORMAL == status)
   18.         {
   19.             // ???????????   the following line crash because
   self->priv->composition is NULL
   20.             // at this moment, which is almost impossible.
   21.             // composition could only be null after dispose, but I
   have called g_object_ref(self)
   22.              // How can this happen!!
   23.
   24.             vivs_icomposition_write(self->priv->composition,
   self->priv->pkt_buffer, length);
   25.         }
   26.         else if(G_IO_STATUS_AGAIN != status)
   27.         {
   28.             g_assert(err != NULL);
   29.             g_error_free(err);
   30.         }
   31.     }
   32.
   33. on_return:
   34.     g_mutex_unlock(self->priv->lock);
   35.
   36.     g_object_unref(self);
   37.     return TRUE;
   38. }



-- 
look to the things around you,the immediate world around you, if you are
alive,it will mean something to you ——Paul Strand
_______________________________________________
gtk-list mailing list
gtk-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to