libcacard: replace qemu thread primitives with glib ones
Replace QemuMutex with GMutex and QemuCond with GCond (with corresponding function changes), to make libcacard independent of qemu internal functions. After this step, none of libcacard internals use any qemu-provided symbols. Maybe it's a good idea to stop including qemu-common.h internally too. Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> Reviewed-by: Alon Levy <alevy@redhat.com> Tested-by: Alon Levy <alevy@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
2a0c46da96
commit
fd25c0e6dd
@ -3,13 +3,7 @@ libcacard_includedir=$(includedir)/cacard
|
||||
TOOLS += vscclient$(EXESUF)
|
||||
|
||||
# objects linked into a shared library, built with libtool with -fPIC if required
|
||||
libcacard-obj-y = $(stub-obj-y) $(libcacard-y)
|
||||
libcacard-obj-y += util/osdep.o util/cutils.o util/qemu-timer-common.o
|
||||
libcacard-obj-y += util/error.o util/qemu-error.o
|
||||
libcacard-obj-$(CONFIG_WIN32) += util/oslib-win32.o util/qemu-thread-win32.o
|
||||
libcacard-obj-$(CONFIG_POSIX) += util/oslib-posix.o util/qemu-thread-posix.o
|
||||
libcacard-obj-y += $(filter trace/%, $(util-obj-y))
|
||||
|
||||
libcacard-obj-y = $(libcacard-y)
|
||||
libcacard-lobj-y=$(patsubst %.o,%.lo,$(libcacard-obj-y))
|
||||
|
||||
# libtool will build the .o files, too
|
||||
|
@ -6,7 +6,6 @@
|
||||
*/
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/thread.h"
|
||||
|
||||
#include "vcard.h"
|
||||
#include "vreader.h"
|
||||
@ -43,13 +42,11 @@ vevent_delete(VEvent *vevent)
|
||||
|
||||
static VEvent *vevent_queue_head;
|
||||
static VEvent *vevent_queue_tail;
|
||||
static QemuMutex vevent_queue_lock;
|
||||
static QemuCond vevent_queue_condition;
|
||||
static CompatGMutex vevent_queue_lock;
|
||||
static CompatGCond vevent_queue_condition;
|
||||
|
||||
void vevent_queue_init(void)
|
||||
{
|
||||
qemu_mutex_init(&vevent_queue_lock);
|
||||
qemu_cond_init(&vevent_queue_condition);
|
||||
vevent_queue_head = vevent_queue_tail = NULL;
|
||||
}
|
||||
|
||||
@ -57,7 +54,7 @@ void
|
||||
vevent_queue_vevent(VEvent *vevent)
|
||||
{
|
||||
vevent->next = NULL;
|
||||
qemu_mutex_lock(&vevent_queue_lock);
|
||||
g_mutex_lock(&vevent_queue_lock);
|
||||
if (vevent_queue_head) {
|
||||
assert(vevent_queue_tail);
|
||||
vevent_queue_tail->next = vevent;
|
||||
@ -65,8 +62,8 @@ vevent_queue_vevent(VEvent *vevent)
|
||||
vevent_queue_head = vevent;
|
||||
}
|
||||
vevent_queue_tail = vevent;
|
||||
qemu_cond_signal(&vevent_queue_condition);
|
||||
qemu_mutex_unlock(&vevent_queue_lock);
|
||||
g_cond_signal(&vevent_queue_condition);
|
||||
g_mutex_unlock(&vevent_queue_lock);
|
||||
}
|
||||
|
||||
/* must have lock */
|
||||
@ -86,11 +83,11 @@ VEvent *vevent_wait_next_vevent(void)
|
||||
{
|
||||
VEvent *vevent;
|
||||
|
||||
qemu_mutex_lock(&vevent_queue_lock);
|
||||
g_mutex_lock(&vevent_queue_lock);
|
||||
while ((vevent = vevent_dequeue_vevent()) == NULL) {
|
||||
qemu_cond_wait(&vevent_queue_condition, &vevent_queue_lock);
|
||||
g_cond_wait(&vevent_queue_condition, &vevent_queue_lock);
|
||||
}
|
||||
qemu_mutex_unlock(&vevent_queue_lock);
|
||||
g_mutex_unlock(&vevent_queue_lock);
|
||||
return vevent;
|
||||
}
|
||||
|
||||
@ -98,9 +95,9 @@ VEvent *vevent_get_next_vevent(void)
|
||||
{
|
||||
VEvent *vevent;
|
||||
|
||||
qemu_mutex_lock(&vevent_queue_lock);
|
||||
g_mutex_lock(&vevent_queue_lock);
|
||||
vevent = vevent_dequeue_vevent();
|
||||
qemu_mutex_unlock(&vevent_queue_lock);
|
||||
g_mutex_unlock(&vevent_queue_lock);
|
||||
return vevent;
|
||||
}
|
||||
|
||||
|
@ -9,10 +9,8 @@
|
||||
#undef G_LOG_DOMAIN
|
||||
#endif
|
||||
#define G_LOG_DOMAIN "libcacard"
|
||||
#include <glib.h>
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "qemu/thread.h"
|
||||
|
||||
#include "vcard.h"
|
||||
#include "vcard_emul.h"
|
||||
@ -28,7 +26,7 @@ struct VReaderStruct {
|
||||
VCard *card;
|
||||
char *name;
|
||||
vreader_id_t id;
|
||||
QemuMutex lock;
|
||||
CompatGMutex lock;
|
||||
VReaderEmul *reader_private;
|
||||
VReaderEmulFree reader_private_free;
|
||||
};
|
||||
@ -97,13 +95,13 @@ apdu_ins_to_string(int ins)
|
||||
static inline void
|
||||
vreader_lock(VReader *reader)
|
||||
{
|
||||
qemu_mutex_lock(&reader->lock);
|
||||
g_mutex_lock(&reader->lock);
|
||||
}
|
||||
|
||||
static inline void
|
||||
vreader_unlock(VReader *reader)
|
||||
{
|
||||
qemu_mutex_unlock(&reader->lock);
|
||||
g_mutex_unlock(&reader->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -116,7 +114,7 @@ vreader_new(const char *name, VReaderEmul *private,
|
||||
VReader *reader;
|
||||
|
||||
reader = g_new(VReader, 1);
|
||||
qemu_mutex_init(&reader->lock);
|
||||
g_mutex_init(&reader->lock);
|
||||
reader->reference_count = 1;
|
||||
reader->name = g_strdup(name);
|
||||
reader->card = NULL;
|
||||
@ -152,6 +150,7 @@ vreader_free(VReader *reader)
|
||||
return;
|
||||
}
|
||||
vreader_unlock(reader);
|
||||
g_mutex_clear(&reader->lock);
|
||||
if (reader->card) {
|
||||
vcard_free(reader->card);
|
||||
}
|
||||
@ -406,25 +405,24 @@ vreader_dequeue(VReaderList *list, VReaderListEntry *entry)
|
||||
}
|
||||
|
||||
static VReaderList *vreader_list;
|
||||
static QemuMutex vreader_list_mutex;
|
||||
static CompatGMutex vreader_list_mutex;
|
||||
|
||||
static void
|
||||
vreader_list_init(void)
|
||||
{
|
||||
vreader_list = vreader_list_new();
|
||||
qemu_mutex_init(&vreader_list_mutex);
|
||||
}
|
||||
|
||||
static void
|
||||
vreader_list_lock(void)
|
||||
{
|
||||
qemu_mutex_lock(&vreader_list_mutex);
|
||||
g_mutex_lock(&vreader_list_mutex);
|
||||
}
|
||||
|
||||
static void
|
||||
vreader_list_unlock(void)
|
||||
{
|
||||
qemu_mutex_unlock(&vreader_list_mutex);
|
||||
g_mutex_unlock(&vreader_list_mutex);
|
||||
}
|
||||
|
||||
static VReaderList *
|
||||
|
Loading…
Reference in New Issue
Block a user