diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2015-03-05 16:47:14 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2015-03-10 10:49:25 +0100 |
commit | 24fa90499f8b24bcba2960a3316d797f9b80b5e9 (patch) | |
tree | 4e93359844894cf44e1799deb2accf541cccb6a1 /disas.c | |
parent | 811c5727765eba00824c29a696350d4780d86c19 (diff) | |
download | qemu-24fa90499f8b24bcba2960a3316d797f9b80b5e9.zip qemu-24fa90499f8b24bcba2960a3316d797f9b80b5e9.tar.gz qemu-24fa90499f8b24bcba2960a3316d797f9b80b5e9.tar.bz2 |
qemu-thread: do not use PTHREAD_MUTEX_ERRORCHECK
PTHREAD_MUTEX_ERRORCHECK is completely broken with respect to fork.
The way to safely do fork is to bring all threads to a quiescent
state by acquiring locks (either in callers---as we do for the
iothread mutex---or using pthread_atfork's prepare callbacks)
and then release them in the child.
The problem is that releasing error-checking locks in the child
fails under glibc with EPERM, because the mutex stores a different
owner tid than the duplicated thread in the child process. We
could make it work for locks acquired via pthread_atfork, by
recreating the mutex in the child instead of unlocking it
(we know that there are no other threads that could have taken
the mutex; but when the lock is acquired in fork's caller
that would not be possible.
The simplest solution is just to forgo error checking.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'disas.c')
0 files changed, 0 insertions, 0 deletions