diff options
author | David Turner <digit@android.com> | 2010-09-09 21:24:55 +0200 |
---|---|---|
committer | David 'Digit' Turner <digit@android.com> | 2010-09-13 00:30:34 -0700 |
commit | 0c0b2b4e96b030854987b16a779e30a3741d3b0d (patch) | |
tree | d740fb51739575195344550e2619080131f5913b /qemu-thread.c | |
parent | fd4c0076b7470f5962ff462bae9cd9f208e059b7 (diff) | |
download | external_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.c | 29 |
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); +} |