aboutsummaryrefslogtreecommitdiffstats
path: root/qemu-thread.c
diff options
context:
space:
mode:
authorDavid Turner <digit@android.com>2010-09-09 21:24:55 +0200
committerDavid 'Digit' Turner <digit@android.com>2010-09-13 00:30:34 -0700
commit0c0b2b4e96b030854987b16a779e30a3741d3b0d (patch)
treed740fb51739575195344550e2619080131f5913b /qemu-thread.c
parentfd4c0076b7470f5962ff462bae9cd9f208e059b7 (diff)
downloadexternal_qemu-0c0b2b4e96b030854987b16a779e30a3741d3b0d.zip
external_qemu-0c0b2b4e96b030854987b16a779e30a3741d3b0d.tar.gz
external_qemu-0c0b2b4e96b030854987b16a779e30a3741d3b0d.tar.bz2
upstream: qemu-thread update.
Diffstat (limited to 'qemu-thread.c')
-rw-r--r--qemu-thread.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/qemu-thread.c b/qemu-thread.c
index 3923db7..fbc78fe 100644
--- a/qemu-thread.c
+++ b/qemu-thread.c
@@ -34,6 +34,15 @@ void qemu_mutex_init(QemuMutex *mutex)
error_exit(err, __func__);
}
+void qemu_mutex_destroy(QemuMutex *mutex)
+{
+ int err;
+
+ err = pthread_mutex_destroy(&mutex->lock);
+ if (err)
+ error_exit(err, __func__);
+}
+
void qemu_mutex_lock(QemuMutex *mutex)
{
int err;
@@ -90,6 +99,15 @@ void qemu_cond_init(QemuCond *cond)
error_exit(err, __func__);
}
+void qemu_cond_destroy(QemuCond *cond)
+{
+ int err;
+
+ err = pthread_cond_destroy(&cond->cond);
+ if (err)
+ error_exit(err, __func__);
+}
+
void qemu_cond_signal(QemuCond *cond)
{
int err;
@@ -137,9 +155,16 @@ void qemu_thread_create(QemuThread *thread,
{
int err;
+ /* Leave signal handling to the iothread. */
+ sigset_t set, oldset;
+
+ sigfillset(&set);
+ pthread_sigmask(SIG_SETMASK, &set, &oldset);
err = pthread_create(&thread->thread, NULL, start_routine, arg);
if (err)
error_exit(err, __func__);
+
+ pthread_sigmask(SIG_SETMASK, &oldset, NULL);
}
void qemu_thread_signal(QemuThread *thread, int sig)
@@ -161,3 +186,7 @@ int qemu_thread_equal(QemuThread *thread1, QemuThread *thread2)
return pthread_equal(thread1->thread, thread2->thread);
}
+void qemu_thread_exit(void *retval)
+{
+ pthread_exit(retval);
+}