From 2e5d8e2add8934e026d52a1936917a0724bc2a90 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 19 2015 16:06:34 +0000 Subject: import tcl-8.5.13-8.el7 --- diff --git a/SOURCES/tcl-8.5.13-notifier-thread-fork-fix.patch b/SOURCES/tcl-8.5.13-notifier-thread-fork-fix.patch new file mode 100644 index 0000000..9225a5e --- /dev/null +++ b/SOURCES/tcl-8.5.13-notifier-thread-fork-fix.patch @@ -0,0 +1,173 @@ +diff --git a/unix/configure.in b/unix/configure.in +index b606b74..46dec02 100755 +--- a/unix/configure.in ++++ b/unix/configure.in +@@ -491,6 +491,12 @@ SC_ENABLE_LANGINFO + AC_CHECK_FUNCS(chflags) + + #-------------------------------------------------------------------- ++# Check for support of pthread_atfork function ++#-------------------------------------------------------------------- ++ ++AC_CHECK_FUNCS(pthread_atfork) ++ ++#-------------------------------------------------------------------- + # Check for support of isnan() function or macro + #-------------------------------------------------------------------- + +@@ -513,7 +519,6 @@ if test "`uname -s`" = "Darwin" ; then + if test $tcl_corefoundation = yes; then + AC_CHECK_HEADERS(libkern/OSAtomic.h) + AC_CHECK_FUNCS(OSSpinLockLock) +- AC_CHECK_FUNCS(pthread_atfork) + fi + AC_DEFINE(USE_VFORK, 1, [Should we use vfork() instead of fork()?]) + AC_DEFINE(TCL_DEFAULT_ENCODING, "utf-8", +diff --git a/unix/tclUnixNotfy.c b/unix/tclUnixNotfy.c +index 51f0b1f..9006906 100644 +--- a/unix/tclUnixNotfy.c ++++ b/unix/tclUnixNotfy.c +@@ -128,6 +128,15 @@ static Tcl_ThreadDataKey dataKey; + static int notifierCount = 0; + + /* ++ * The following static stores the process ID of the initialized notifier ++ * thread. If it changes, we have passed a fork and we should start a new ++ * notifier thread. ++ * ++ * You must hold the notifierMutex lock before accessing this variable. ++ */ ++static pid_t processIDInitialized = 0; ++ ++/* + * The following variable points to the head of a doubly-linked list of + * ThreadSpecificData structures for all threads that are currently waiting on + * an event. +@@ -193,7 +202,13 @@ static Tcl_ThreadId notifierThread; + + #ifdef TCL_THREADS + static void NotifierThreadProc(ClientData clientData); +-#endif ++#ifdef HAVE_PTHREAD_ATFORK ++static int atForkInit = 0; ++static void AtForkPrepare(void); ++static void AtForkParent(void); ++static void AtForkChild(void); ++#endif /* HAVE_PTHREAD_ATFORK */ ++#endif /* TCL_THREADS */ + static int FileHandlerEventProc(Tcl_Event *evPtr, int flags); + + /* +@@ -267,11 +282,38 @@ Tcl_InitNotifier(void) + */ + + Tcl_MutexLock(¬ifierMutex); ++#ifdef HAVE_PTHREAD_ATFORK ++ /* ++ * Install pthread_atfork handlers to reinitialize the notifier in the ++ * child of a fork. ++ */ ++ ++ if (!atForkInit) { ++ int result = pthread_atfork(AtForkPrepare, AtForkParent, AtForkChild); ++ ++ if (result) { ++ Tcl_Panic("Tcl_InitNotifier: pthread_atfork failed"); ++ } ++ atForkInit = 1; ++ } ++#endif ++ /* ++ * Check if my process id changed, e.g. I was forked ++ * In this case, restart the notifier thread and close the ++ * pipe to the original notifier thread ++ */ ++ if (notifierCount > 0 && processIDInitialized != getpid()) { ++ notifierCount = 0; ++ processIDInitialized = 0; ++ close(triggerPipe); ++ triggerPipe = -1; ++ } + if (notifierCount == 0) { + if (TclpThreadCreate(¬ifierThread, NotifierThreadProc, NULL, + TCL_THREAD_STACK_DEFAULT, TCL_THREAD_JOINABLE) != TCL_OK) { + Tcl_Panic("Tcl_InitNotifier: unable to start notifier thread"); + } ++ processIDInitialized = getpid(); + } + notifierCount++; + +@@ -1230,6 +1272,73 @@ NotifierThreadProc( + + TclpThreadExit (0); + } ++ ++#ifdef HAVE_PTHREAD_ATFORK ++/* ++ *---------------------------------------------------------------------- ++ * ++ * AtForkPrepare -- ++ * ++ * Lock the notifier in preparation for a fork. ++ * ++ * Results: ++ * None. ++ * ++ * Side effects: ++ * None. ++ * ++ *---------------------------------------------------------------------- ++ */ ++ ++static void ++AtForkPrepare(void) ++{ ++} ++ ++/* ++ *---------------------------------------------------------------------- ++ * ++ * AtForkParent -- ++ * ++ * Unlock the notifier in the parent after a fork. ++ * ++ * Results: ++ * None. ++ * ++ * Side effects: ++ * None. ++ * ++ *---------------------------------------------------------------------- ++ */ ++ ++static void ++AtForkParent(void) ++{ ++} ++ ++/* ++ *---------------------------------------------------------------------- ++ * ++ * AtForkChild -- ++ * ++ * Unlock and reinstall the notifier in the child after a fork. ++ * ++ * Results: ++ * None. ++ * ++ * Side effects: ++ * None. ++ * ++ *---------------------------------------------------------------------- ++ */ ++ ++static void ++AtForkChild(void) ++{ ++ Tcl_InitNotifier(); ++} ++#endif /* HAVE_PTHREAD_ATFORK */ ++ + #endif /* TCL_THREADS */ + + #endif /* HAVE_COREFOUNDATION */ diff --git a/SPECS/tcl.spec b/SPECS/tcl.spec index ad3d604..aa54d46 100644 --- a/SPECS/tcl.spec +++ b/SPECS/tcl.spec @@ -5,7 +5,7 @@ Summary: Tool Command Language, pronounced tickle Name: tcl Version: %{vers} -Release: 4%{?dist} +Release: 8%{?dist} Epoch: 1 License: TCL Group: Development/Languages @@ -19,6 +19,7 @@ Provides: tcl-tcldict = %{vers} Patch0: tcl-8.5.1-autopath.patch Patch1: tcl-8.5.10-conf.patch Patch2: tcl-8.5.12-hidden.patch +Patch3: tcl-8.5.13-notifier-thread-fork-fix.patch %if %sdt BuildRequires: systemtap-sdt-devel @@ -56,15 +57,16 @@ chmod -x generic/tclThreadAlloc.c %patch0 -p1 -b .autopath %patch1 -p1 -b .conf %patch2 -p1 -b .hidden +%patch3 -p1 -b .notifier-thread-fork-fix %build pushd unix -autoconf +autoconf -f %configure \ %if %sdt --enable-dtrace \ %endif ---disable-threads \ +--enable-threads \ --enable-symbols \ --enable-shared @@ -137,6 +139,24 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/%{name}%{majorver}/tclAppInit.c %changelog +* Wed Jul 29 2015 Jaroslav Škarvada - 1:8.5.13-8 +- Dropped 'configure' patch hunks, because 'configure' is re-generated + Related: rhbz#1247555 + +* Wed Jul 29 2015 Jaroslav Škarvada - 1:8.5.13-7 +- Forced autoconf to rebuild its files + Related: rhbz#1247555 + +* Tue Jul 28 2015 Jaroslav Škarvada - 1:8.5.13-6 +- Rebuilt due to wrong tcl_pkgPath on s390x and ppc64le + Resolves: rhbz#1247555 + +* Mon Jul 6 2015 Jaroslav Škarvada - 1:8.5.13-5 +- Fixed fork, enabled threading (by notifier-thread-fork-fix patch) + Resolves: rhbz#869315 +- Rebuild to fix systemtap on aarch64 + Resolves: rhbz#1238479 + * Fri Jan 24 2014 Daniel Mach - 1:8.5.13-4 - Mass rebuild 2014-01-24