mirror of https://github.com/proxmox/mirror_qemu
posix-aio-compat: avoid signal race when spawning a thread
Signed-off-by: malc <av1474@comtv.ru>master
parent
bedda79c1e
commit
ee3993069f
|
@ -301,14 +301,9 @@ static size_t handle_aiocb_rw(struct qemu_paiocb *aiocb)
|
||||||
static void *aio_thread(void *unused)
|
static void *aio_thread(void *unused)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
sigset_t set;
|
|
||||||
|
|
||||||
pid = getpid();
|
pid = getpid();
|
||||||
|
|
||||||
/* block all signals */
|
|
||||||
if (sigfillset(&set)) die("sigfillset");
|
|
||||||
if (sigprocmask(SIG_BLOCK, &set, NULL)) die("sigprocmask");
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
struct qemu_paiocb *aiocb;
|
struct qemu_paiocb *aiocb;
|
||||||
size_t ret = 0;
|
size_t ret = 0;
|
||||||
|
@ -369,9 +364,18 @@ static void *aio_thread(void *unused)
|
||||||
|
|
||||||
static void spawn_thread(void)
|
static void spawn_thread(void)
|
||||||
{
|
{
|
||||||
|
sigset_t set, oldset;
|
||||||
|
|
||||||
cur_threads++;
|
cur_threads++;
|
||||||
idle_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);
|
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)
|
static void qemu_paio_submit(struct qemu_paiocb *aiocb)
|
||||||
|
|
Loading…
Reference in New Issue