From: Paolo Bonzini <pbonzini@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 18/25] qemu-thread: add QemuSemaphore
Date: Wed, 31 Oct 2012 09:46:23 +0100 [thread overview]
Message-ID: <5090E55F.3090401@redhat.com> (raw)
In-Reply-To: <20121030184858.GC16674@stefanha-thinkpad.redhat.com>
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
next prev parent reply other threads:[~2012-10-31 8:46 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-26 14:05 [Qemu-devel] [PATCH 00/25] AioContext & threadpool Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 01/25] event_notifier: add Win32 implementation Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 02/25] event_notifier: enable it to use pipes Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 03/25] aio: change qemu_aio_set_fd_handler to return void Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 04/25] aio: provide platform-independent API Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 05/25] aio: introduce AioContext, move bottom halves there Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 06/25] aio: add I/O handlers to the AioContext interface Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 07/25] aio: test node->deleted before calling io_flush Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 08/25] aio: add non-blocking variant of aio_wait Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 09/25] aio: prepare for introducing GSource-based dispatch Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 10/25] aio: add Win32 implementation Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 11/25] aio: make AioContexts GSources Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 12/25] aio: add aio_notify Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 13/25] aio: call aio_notify after setting I/O handlers Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 14/25] main-loop: use GSource to poll AIO file descriptors Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 15/25] main-loop: use aio_notify for qemu_notify_event Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 16/25] aio: clean up now-unused functions Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 17/25] linux-aio: use event notifiers Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 18/25] qemu-thread: add QemuSemaphore Paolo Bonzini
2012-10-30 18:48 ` Stefan Hajnoczi
2012-10-31 8:46 ` Paolo Bonzini [this message]
2012-10-26 14:05 ` [Qemu-devel] [PATCH 19/25] aio: add generic thread-pool facility Paolo Bonzini
2012-10-30 19:13 ` Stefan Hajnoczi
2012-10-31 9:41 ` Paolo Bonzini
2012-10-31 13:44 ` Stefan Hajnoczi
2012-10-26 14:05 ` [Qemu-devel] [PATCH 20/25] block: switch posix-aio-compat to threadpool Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 21/25] raw: merge posix-aio-compat.c into block/raw-posix.c Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 22/25] raw-posix: rename raw-posix-aio.h, hide unavailable prototypes Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 23/25] raw-win32: add emulated AIO support Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 24/25] raw-posix: move linux-aio.c to block/ Paolo Bonzini
2012-10-26 14:05 ` [Qemu-devel] [PATCH 25/25] raw-win32: implement native asynchronous I/O Paolo Bonzini
2012-10-30 19:15 ` [Qemu-devel] [PATCH 00/25] AioContext & threadpool Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5090E55F.3090401@redhat.com \
--to=pbonzini@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.