diff options
-rw-r--r-- | posix-aio-compat.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/posix-aio-compat.c b/posix-aio-compat.c index 68cbec8bd1..400d898e5c 100644 --- a/posix-aio-compat.c +++ b/posix-aio-compat.c @@ -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) |