qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] libcacard: replace qemu thread primitives with


From: Michael Tokarev
Subject: Re: [Qemu-devel] [PATCH] libcacard: replace qemu thread primitives with glib ones
Date: Mon, 28 Apr 2014 15:48:57 +0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.4.0

28.04.2014 14:19, Peter Maydell wrote:
> On 27 April 2014 17:26, Michael Tokarev <address@hidden> wrote:

>> -static QemuMutex vevent_queue_lock;
>> -static QemuCond vevent_queue_condition;
>> +static GMutex vevent_queue_lock;
>> +static GCond vevent_queue_condition;
>>
>>  void vevent_queue_init(void)
>>  {
>> -    qemu_mutex_init(&vevent_queue_lock);
>> -    qemu_cond_init(&vevent_queue_condition);
>> +    g_mutex_init(&vevent_queue_lock);
>> +    g_cond_init(&vevent_queue_condition);
>>      vevent_queue_head = vevent_queue_tail = NULL;
>>  }
> 
> Just to record a conversation from IRC: this won't
> compile on older versions of glib, because those don't
> support g_cond_init(). Conversely, if you use g_cond_new()
> then newer glib will complain that it's deprecated.
> trace/simple.c has an example of how you have to work
> around this API churn...

I've added a tiny (but hackish and fun) wrapper header for all
this, and pushed whole thing into a branch on my site -- see

 http://git.corpit.ru/?p=qemu.git;a=shortlog;h=refs/heads/libcacard-standalone

The wrapper is here:

 
http://git.corpit.ru/?p=qemu.git;a=blob;f=libcacard/glib-compat.h;h=47fd06a43572fc5cc639fb7d705e85f3965d6b91;hb=1aeefee2a4bb2694b2314cddd04e08675360e255

It allows to use the new primitives/interface with either new (unchanged)
or old (wrapped) glib cond and mutex API.

I think this is better than a way used in trace/simple.c, and can be
used there too, making stuff much more readable.

Please note: the wrapper redifines some core symbols which are used in
glib so it must come somewhere near the end of #include set.  Most
interesting is that it redefines GCOnd into GCond* (only for old glib).

Thanks,

/mjt



reply via email to

[Prev in Thread] Current Thread [Next in Thread]