On Mon, 2005-01-24 at 13:50 +0100, David Necas (Yeti) wrote: > On Mon, Jan 24, 2005 at 12:07:58AM -0800, Josh Green wrote: > > Hello, I'm the author of refdbg (http://refdbg.sourceforge.net), a > > GObject reference count debugger. Recently a user notified me that it > > doesn't work with glib 2.6.x. Refdbg works by using LD_PRELOAD to > > override the following functions in GObject: > > > > g_object_newv > > g_type_free_instance > > g_object_ref > > g_object_unref > > > > It seems with glib 2.6.x the first two functions (g_object_newv and > > g_type_free_instance), do not get overridden, while g_object_ref/unref > > do. I was hoping that someone could give me some hints on why this is > > happening. Tips on debugging the LD_PRELOAD process or a better method > > of catching calls to these functions would also be appreciated. > > I'm afraid calls to these functions inside GLib itself > cannot be overriden by LD_PRELOAD (or any other run-time > method) any more. See > > http://bugzilla.gnome.org/show_bug.cgi?id=145519 > > for discussion. > > Calls to the latter two usually appear outside GLib (in Gtk+ > or user code) while to the former two inside GLib itself -- > this explains the observed difference. > > Yeti > Thank you for that information, very informative. I suppose refdbg will need to override g_object_new, g_object_new_valist and g_object_newv for the 2.6.x versions in order to be complete. Unfortunately I don't see a way to determine when an object is actually finalized (I was using g_type_free_instance). So I suppose it will have to rely on g_object_unref which is problematic, since ref/unref activity may occur in the finalize callback which might lead to the object not being destroyed or refdbg thinking the reference activity is erroneous when in fact it is valid. If anyone has some ideas on how to handle this (determining when an object is actually freed), I would appreciate the info. Thanks again. Josh Green
Attachment:
signature.asc
Description: This is a digitally signed message part