Fix dead lock in PerlIO after fork from thread
This commit is contained in:
parent
c367bfcf00
commit
a381049bf6
|
@ -0,0 +1,48 @@
|
||||||
|
From 4da80956418bbe1fdc23cad0b1cbb24cd7b87609 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Patrik=20H=C3=A4gglund?= <patrik.h.hagglund@ericsson.com>
|
||||||
|
Date: Sat, 2 Feb 2013 20:21:05 +0100
|
||||||
|
Subject: [PATCH] PATCH [perl #106212] Add PL_perlio_mutex to
|
||||||
|
atfork_lock/unlock
|
||||||
|
|
||||||
|
Using threads + fork() on Linux, and IO operations in the threads, the
|
||||||
|
PL_perlio_mutex may be left in a locked state at the call of fork(),
|
||||||
|
potentially leading to deadlock in the child process at subsequent IO
|
||||||
|
operations. (Threads are pre-empted and not continued in the child
|
||||||
|
process after the fork.)
|
||||||
|
|
||||||
|
Therefore, ensure that the PL_perlio_mutex is unlocked in the child
|
||||||
|
process, right after fork(), by using atfork_lock/unlock.
|
||||||
|
|
||||||
|
(The RT text gives ways to reproduce the problem, but are not easily
|
||||||
|
added to Perl's test suite)
|
||||||
|
---
|
||||||
|
util.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/util.c b/util.c
|
||||||
|
index 5c695b8..75381f1 100644
|
||||||
|
--- a/util.c
|
||||||
|
+++ b/util.c
|
||||||
|
@@ -2798,6 +2798,9 @@ Perl_atfork_lock(void)
|
||||||
|
dVAR;
|
||||||
|
#if defined(USE_ITHREADS)
|
||||||
|
/* locks must be held in locking order (if any) */
|
||||||
|
+# ifdef USE_PERLIO
|
||||||
|
+ MUTEX_LOCK(&PL_perlio_mutex);
|
||||||
|
+# endif
|
||||||
|
# ifdef MYMALLOC
|
||||||
|
MUTEX_LOCK(&PL_malloc_mutex);
|
||||||
|
# endif
|
||||||
|
@@ -2812,6 +2815,9 @@ Perl_atfork_unlock(void)
|
||||||
|
dVAR;
|
||||||
|
#if defined(USE_ITHREADS)
|
||||||
|
/* locks must be released in same order as in atfork_lock() */
|
||||||
|
+# ifdef USE_PERLIO
|
||||||
|
+ MUTEX_UNLOCK(&PL_perlio_mutex);
|
||||||
|
+# endif
|
||||||
|
# ifdef MYMALLOC
|
||||||
|
MUTEX_UNLOCK(&PL_malloc_mutex);
|
||||||
|
# endif
|
||||||
|
--
|
||||||
|
1.8.1.4
|
||||||
|
|
|
@ -119,6 +119,9 @@ Patch22: perl-5.16.3-Don-t-leak-deleted-iterator-when-tying-hash.patch
|
||||||
Patch23: perl-5.16.3-Free-iterator-when-freeing-tied-hash.patch
|
Patch23: perl-5.16.3-Free-iterator-when-freeing-tied-hash.patch
|
||||||
Patch24: perl-5.16.3-Don-t-leak-if-hh-copying-dies.patch
|
Patch24: perl-5.16.3-Don-t-leak-if-hh-copying-dies.patch
|
||||||
|
|
||||||
|
# Fix dead lock in PerlIO after fork from thread, rhbz#947444, RT#106212
|
||||||
|
Patch25: perl-5.17.9-106212-Add-PL_perlio_mutex-to-atfork_lock.patch
|
||||||
|
|
||||||
# Update some of the bundled modules
|
# Update some of the bundled modules
|
||||||
# see http://fedoraproject.org/wiki/Perl/perl.spec for instructions
|
# see http://fedoraproject.org/wiki/Perl/perl.spec for instructions
|
||||||
|
|
||||||
|
@ -1830,6 +1833,7 @@ tarball from perl.org.
|
||||||
%patch22 -p1
|
%patch22 -p1
|
||||||
%patch23 -p1
|
%patch23 -p1
|
||||||
%patch24 -p1
|
%patch24 -p1
|
||||||
|
%patch25 -p1
|
||||||
|
|
||||||
#copy the example script
|
#copy the example script
|
||||||
cp -a %{SOURCE5} .
|
cp -a %{SOURCE5} .
|
||||||
|
@ -2044,6 +2048,7 @@ pushd %{build_archlib}/CORE/
|
||||||
'Fedora Patch22: Fix leaking tied hashes (RT#107000) [1]' \
|
'Fedora Patch22: Fix leaking tied hashes (RT#107000) [1]' \
|
||||||
'Fedora Patch23: Fix leaking tied hashes (RT#107000) [2]' \
|
'Fedora Patch23: Fix leaking tied hashes (RT#107000) [2]' \
|
||||||
'Fedora Patch24: Fix leaking tied hashes (RT#107000) [3]' \
|
'Fedora Patch24: Fix leaking tied hashes (RT#107000) [3]' \
|
||||||
|
'Fedora Patch25: Fix dead lock in PerlIO after fork from thread (RT106212)' \
|
||||||
%{nil}
|
%{nil}
|
||||||
|
|
||||||
rm patchlevel.bak
|
rm patchlevel.bak
|
||||||
|
@ -3485,6 +3490,7 @@ sed \
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Apr 10 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-270
|
* Wed Apr 10 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-270
|
||||||
- Fix leaking tied hashes (bug #859910)
|
- Fix leaking tied hashes (bug #859910)
|
||||||
|
- Fix dead lock in PerlIO after fork from thread (bug #947444)
|
||||||
|
|
||||||
* Tue Apr 09 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-269
|
* Tue Apr 09 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-269
|
||||||
- Sub-package Sys-Syslog (bug #950057)
|
- Sub-package Sys-Syslog (bug #950057)
|
||||||
|
|
Loading…
Reference in New Issue