[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 18/25] qemu-thread: add QemuSemaphore
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 18/25] qemu-thread: add QemuSemaphore |
Date: |
Wed, 31 Oct 2012 09:46:23 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121016 Thunderbird/16.0.1 |
Il 30/10/2012 19:48, Stefan Hajnoczi ha scritto:
>> + if (rc < 0) {
>> + error_exit(errno, __func__);
>> + }
>
> Forgot to handle EINTR?
>
>> + return 0;
>> +}
>> +
>> +void qemu_sem_wait(QemuSemaphore *sem)
>> +{
>> + int rc;
>> +
>> + rc = sem_wait(&sem->sem);
>> + if (rc < 0) {
>> + error_exit(errno, __func__);
>> + }
>
> EINTR
Right!
I'm squashing this:
diff --git a/qemu-thread-posix.c b/qemu-thread-posix.c
index dea57d4..6a3d3a1 100644
--- a/qemu-thread-posix.c
+++ b/qemu-thread-posix.c
@@ -154,7 +154,9 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
if (ms <= 0) {
/* This is cheaper than sem_timedwait. */
- rc = sem_trywait(&sem->sem);
+ do {
+ rc = sem_trywait(&sem->sem);
+ } while (rc == -1 && errno == EINTR);
if (rc == -1 && errno == EAGAIN) {
return -1;
}
@@ -168,7 +170,9 @@ int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
ts.tv_sec++;
ts.tv_nsec -= 1000000000;
}
- rc = sem_timedwait(&sem->sem, &ts);
+ do {
+ rc = sem_timedwait(&sem->sem, &ts);
+ } while (rc == -1 && errno == EINTR);
if (rc == -1 && errno == ETIMEDOUT) {
return -1;
}
@@ -183,7 +187,9 @@ void qemu_sem_wait(QemuSemaphore *sem)
{
int rc;
- rc = sem_wait(&sem->sem);
+ do {
+ rc = sem_wait(&sem->sem);
+ } while (rc == -1 && errno == EINTR);
if (rc < 0) {
error_exit(errno, __func__);
}
Paolo
- [Qemu-devel] [PATCH 11/25] aio: make AioContexts GSources, (continued)
- [Qemu-devel] [PATCH 11/25] aio: make AioContexts GSources, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 08/25] aio: add non-blocking variant of aio_wait, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 06/25] aio: add I/O handlers to the AioContext interface, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 02/25] event_notifier: enable it to use pipes, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 09/25] aio: prepare for introducing GSource-based dispatch, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 12/25] aio: add aio_notify, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 15/25] main-loop: use aio_notify for qemu_notify_event, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 17/25] linux-aio: use event notifiers, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 18/25] qemu-thread: add QemuSemaphore, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 10/25] aio: add Win32 implementation, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 13/25] aio: call aio_notify after setting I/O handlers, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 16/25] aio: clean up now-unused functions, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 14/25] main-loop: use GSource to poll AIO file descriptors, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 19/25] aio: add generic thread-pool facility, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 22/25] raw-posix: rename raw-posix-aio.h, hide unavailable prototypes, Paolo Bonzini, 2012/10/26
- [Qemu-devel] [PATCH 25/25] raw-win32: implement native asynchronous I/O, Paolo Bonzini, 2012/10/26