From ab206cf53ff4380c63f031101c36b6bc0c7a8489 Mon Sep 17 00:00:00 2001 From: Jasmine Hassan Date: Mon, 29 Oct 2012 04:21:19 +0200 Subject: [places-sidebar] plug leak in _dispose, add g_clear_object in glibcomat.h to cleanup code a bit. http://git.gnome.org/browse/nautilus/commit/?id=c6fa6b2062a1adf3e4945824048b3771edb35ebe for g_clear_object compatibility: https://gitorious.org/vaapi/gstreamer-vaapi/commit/ab2ec5e2541834c2490a78ec839850df2b075cf5?format=diff --- src/glibcompat.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/glibcompat.h') diff --git a/src/glibcompat.h b/src/glibcompat.h index a83da239..4c71b2b5 100644 --- a/src/glibcompat.h +++ b/src/glibcompat.h @@ -38,4 +38,22 @@ g_list_free_full (GList *list, GDestroyNotify free_func) } #endif +#if !GLIB_CHECK_VERSION(2,28,0) +static inline void +g_clear_object_inline(volatile GObject **object_ptr) +{ + gpointer * const ptr = (gpointer)object_ptr; + gpointer old; + + do { + old = g_atomic_pointer_get(ptr); + } while G_UNLIKELY(!g_atomic_pointer_compare_and_exchange(ptr, old, NULL)); + + if (old) + g_object_unref(old); +} +#undef g_clear_object +#define g_clear_object(obj) g_clear_object_inline((volatile GObject **)(obj)) +#endif + #endif /* GLIB_COMPAT_H */ -- cgit v1.2.1