sim-card
/
qemu
Archived
10
0
Fork 0

posix-aio-compat: avoid signal race when spawning a thread

Signed-off-by: malc <av1474@comtv.ru>
This commit is contained in:
malc 2009-09-25 00:20:44 +04:00
parent bedda79c1e
commit ee3993069f
1 changed files with 9 additions and 5 deletions

View File

@ -301,14 +301,9 @@ static size_t handle_aiocb_rw(struct qemu_paiocb *aiocb)
static void *aio_thread(void *unused)
{
pid_t pid;
sigset_t set;
pid = getpid();
/* block all signals */
if (sigfillset(&set)) die("sigfillset");
if (sigprocmask(SIG_BLOCK, &set, NULL)) die("sigprocmask");
while (1) {
struct qemu_paiocb *aiocb;
size_t ret = 0;
@ -369,9 +364,18 @@ static void *aio_thread(void *unused)
static void spawn_thread(void)
{
sigset_t set, oldset;
cur_threads++;
idle_threads++;
/* block all signals */
if (sigfillset(&set)) die("sigfillset");
if (sigprocmask(SIG_SETMASK, &set, &oldset)) die("sigprocmask");
thread_create(&thread_id, &attr, aio_thread, NULL);
if (sigprocmask(SIG_SETMASK, &oldset, NULL)) die("sigprocmask restore");
}
static void qemu_paio_submit(struct qemu_paiocb *aiocb)