From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46929) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WgBKC-00037K-T5 for qemu-devel@nongnu.org; Fri, 02 May 2014 07:08:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WgBK6-0001Dj-Nu for qemu-devel@nongnu.org; Fri, 02 May 2014 07:08:16 -0400 Received: from isrv.corpit.ru ([86.62.121.231]:52125) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WgBK6-0001DL-Go for qemu-devel@nongnu.org; Fri, 02 May 2014 07:08:10 -0400 Message-ID: <53637C97.7040103@msgid.tls.msk.ru> Date: Fri, 02 May 2014 15:08:07 +0400 From: Michael Tokarev MIME-Version: 1.0 References: 1391434310-9990-4-git-send-email-stefanha@redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH 3/3] glib: add compat wrapper for GStaticMutex List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: stefanha@redhat.com Cc: qemu-devel Stefan Hajnoczi: > Avoid duplicating ifdefs for the deprecated GStaticMutex API by > introducing compat_g_static_mutex_*() in glib-compat.h. > > GStaticMutex users should use the compat API to avoid dealing with > deprecation. To my taste this is a wrong(ish) approach. GStaticMutex is nothing more than a pointer to GMutex wrapped in an internal structure, and each function from g_static_mutex_* family first checks for this pointer, whenever it is initialized, and calls g_mutex_new() if not. So if there's a good place to actually init (allocate) a GMutex, it is better to use it directly instead of checking for the init in every place. (Note also that this checking itself may need a protection using a mutex, to avoid 2 threads allocating the same GStaticMutex ;) -- this is done in g_static_mutex_get_mutex_impl() inside glib). But that's cosmetics. More to the point is that this is re-introduction of old API for new program. It'd be very nice if we were able to actually use the new API everywhere, instead of re-introducing old API. And this introduces some (light) wrapper #ifdefery too. So we not only will use the old API in the code, we also will use wrappers for almost everything. So it becomes rather clumsy. It is, I think, better to try to switch to the new API as much as possible, or to use our own types and wrappers instead, without resoting to use foo_compat_deprecated_* (where "deprecated" part comes from staticmutex -- ie, instead of regular g_mutex_foo, we use g_compat_static_mutex_foo). Other the bit of clumsiness, this should work. > +/* GStaticMutex was deprecated in 2.32.0. Use the compat_g_static_mutex_*() > + * wrappers to hide the GStaticMutex/GMutex distinction. > + */ > +#if GLIB_CHECK_VERSION(2, 32, 0) It is actually deprecated in 2.31, even if the glib docs says 2.32. Probably not a big deal, as, I think, there's no 2.31 glib in the wild due to bugs in there, so they had to quickly release 2.32. Thanks, /mjt