Fix dead lock in PerlIO after fork from thread
This commit is contained in:
parent
c367bfcf00
commit
a381049bf6
48
perl-5.17.9-106212-Add-PL_perlio_mutex-to-atfork_lock.patch
Normal file
48
perl-5.17.9-106212-Add-PL_perlio_mutex-to-atfork_lock.patch
Normal file
@ -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
|
||||
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
|
||||
# see http://fedoraproject.org/wiki/Perl/perl.spec for instructions
|
||||
|
||||
@ -1830,6 +1833,7 @@ tarball from perl.org.
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24 -p1
|
||||
%patch25 -p1
|
||||
|
||||
#copy the example script
|
||||
cp -a %{SOURCE5} .
|
||||
@ -2044,6 +2048,7 @@ pushd %{build_archlib}/CORE/
|
||||
'Fedora Patch22: Fix leaking tied hashes (RT#107000) [1]' \
|
||||
'Fedora Patch23: Fix leaking tied hashes (RT#107000) [2]' \
|
||||
'Fedora Patch24: Fix leaking tied hashes (RT#107000) [3]' \
|
||||
'Fedora Patch25: Fix dead lock in PerlIO after fork from thread (RT106212)' \
|
||||
%{nil}
|
||||
|
||||
rm patchlevel.bak
|
||||
@ -3485,6 +3490,7 @@ sed \
|
||||
%changelog
|
||||
* Wed Apr 10 2013 Petr Pisar <ppisar@redhat.com> - 4:5.16.3-270
|
||||
- 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
|
||||
- Sub-package Sys-Syslog (bug #950057)
|
||||
|
Loading…
Reference in New Issue
Block a user