From: Jan Djärv Date: Thu, 4 Aug 2011 17:04:39 +0000 (+0200) Subject: Check for pthread and use it if found. X-Git-Tag: emacs-pretest-24.0.90~104^2~124^2~65^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ae9e757af16bd39c21496430f66bcca2a47b4835;p=emacs.git Check for pthread and use it if found. * configure.in (HAVE_PTHREAD): Add check for -lpthread. (HAVE_GTK_AND_PTHREAD): Remove. * src/Makefile.in (LIB_PTHREAD): New variable. (LIBES): Add LIB_PTHREAD (Bug#9216). * src/alloc.c, src/emacs.c, src/gmalloc.c, src/gtkutil.c, src/keyboard.c, src/syssignal.h: Rename HAVE_GTK_AND_PTHREAD to HAVE_PTHREAD (Bug#9216). --- diff --git a/ChangeLog b/ChangeLog index 5b5772f13b4..30f22850d40 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-08-04 Jan Djärv + + * configure.in (HAVE_PTHREAD): Add check for -lpthread (Bug#9216). + (HAVE_GTK_AND_PTHREAD): Remove. + 2011-07-28 Alp Aker * configure.in (HAVE_RSVG): Allow use of -lrsvg-2 for any NextStep diff --git a/configure.in b/configure.in index 45219587131..c0e5b3acbb5 100644 --- a/configure.in +++ b/configure.in @@ -1687,6 +1687,21 @@ dnl AC_CHECK_LIB(resolv, gethostbyname) dnl FIXME replace main with a function we actually want from this library. AC_CHECK_LIB(Xbsd, main, LD_SWITCH_X_SITE="$LD_SWITCH_X_SITE -lXbsd") +dnl Check if pthreads is available. +LIB_PTHREAD= +AC_CHECK_HEADERS(pthread.h) +if test "$ac_cv_header_pthread_h"; then + AC_CHECK_LIB(pthread, pthread_self, HAVE_PTHREAD=yes) +fi +if test "$HAVE_PTHREAD" = yes; then + case "${canonical}" in + *-hpux*) ;; + *) LIB_PTHREAD="-lpthread" ;; + esac + AC_DEFINE(HAVE_PTHREAD, 1, [Define to 1 if you have pthread (-lpthread).]) +fi +AC_SUBST([LIB_PTHREAD]) + AC_CHECK_LIB(pthreads, cma_open) ## Note: when using cpp in s/aix4.2.h, this definition depended on @@ -1943,21 +1958,6 @@ if test "${HAVE_GTK}" = "yes"; then AC_CHECK_FUNCS(gtk_file_selection_new) fi - dnl Check if pthreads are available. Emacs only needs this when using - dnl gtk_file_chooser under Gnome. - HAVE_GTK_AND_PTHREAD=no - AC_CHECK_HEADERS(pthread.h) - if test "$ac_cv_header_pthread_h"; then - AC_CHECK_LIB(pthread, pthread_self, HAVE_GTK_AND_PTHREAD=yes) - fi - if test "$HAVE_GTK_AND_PTHREAD" = yes; then - case "${canonical}" in - *-hpux*) ;; - *) GTK_LIBS="$GTK_LIBS -lpthread" ;; - esac - AC_DEFINE(HAVE_GTK_AND_PTHREAD, 1, - [Define to 1 if you have GTK and pthread (-lpthread).]) - fi dnl Check for functions introduced in 2.14 and later. AC_CHECK_FUNCS(gtk_widget_get_window gtk_widget_set_has_window \ diff --git a/src/ChangeLog b/src/ChangeLog index b8a1c3e6e9a..8ed6761e1dd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2011-08-04 Jan Djärv + + * Makefile.in (LIB_PTHREAD): New variable. + (LIBES): Add LIB_PTHREAD (Bug#9216). + + * alloc.c, emacs.c, gmalloc.c, gtkutil.c, keyboard.c, syssignal.h: + Rename HAVE_GTK_AND_PTHREAD to HAVE_PTHREAD (Bug#9216). + 2011-08-04 Andreas Schwab * regex.c (re_iswctype): Remove some redundant boolean diff --git a/src/Makefile.in b/src/Makefile.in index f68fa5c2240..af4d6df9f8f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -130,6 +130,9 @@ START_FILES = @START_FILES@ ## -lm, or empty. LIB_MATH=@LIB_MATH@ +## -lpthreads, or empty. +LIB_PTHREAD=@LIB_PTHREAD@ + LIBTIFF=@LIBTIFF@ LIBJPEG=@LIBJPEG@ LIBPNG=@LIBPNG@ @@ -385,7 +388,7 @@ LIBES = $(LIBS) $(LIBX_BASE) $(LIBX_OTHER) $(LIBSOUND) \ $(LIBXML2_LIBS) $(LIBGPM) $(LIBRESOLV) $(LIBS_SYSTEM) \ $(LIBS_TERMCAP) $(GETLOADAVG_LIBS) $(SETTINGS_LIBS) $(LIBSELINUX_LIBS) \ $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(LIBOTF_LIBS) $(M17N_FLT_LIBS) \ - $(LIBGNUTLS_LIBS) $(LIB_PTHREAD_SIGMASK) \ + $(LIBGNUTLS_LIBS) $(LIB_PTHREAD) $(LIB_PTHREAD_SIGMASK) \ $(LIB_GCC) $(LIB_MATH) $(LIB_STANDARD) $(LIB_GCC) all: emacs$(EXEEXT) $(OTHER_FILES) diff --git a/src/alloc.c b/src/alloc.c index b96fc1f0642..36ad645612d 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -24,7 +24,7 @@ along with GNU Emacs. If not, see . */ #include -#ifdef HAVE_GTK_AND_PTHREAD +#ifdef HAVE_PTHREAD #include #endif @@ -84,13 +84,15 @@ extern size_t __malloc_extra_blocks; #endif /* not DOUG_LEA_MALLOC */ #if ! defined SYSTEM_MALLOC && ! defined SYNC_INPUT -#ifdef HAVE_GTK_AND_PTHREAD +#ifdef HAVE_PTHREAD /* When GTK uses the file chooser dialog, different backends can be loaded dynamically. One such a backend is the Gnome VFS backend that gets loaded if you run Gnome. That backend creates several threads and also allocates memory with malloc. + Also, gconf and gsettings may create several threads. + If Emacs sets malloc hooks (! SYSTEM_MALLOC) and the emacs_blocked_* functions below are called from malloc, there is a chance that one of these threads preempts the Emacs main thread and the hook variables @@ -122,12 +124,12 @@ static pthread_mutex_t alloc_mutex; } \ while (0) -#else /* ! defined HAVE_GTK_AND_PTHREAD */ +#else /* ! defined HAVE_PTHREAD */ #define BLOCK_INPUT_ALLOC BLOCK_INPUT #define UNBLOCK_INPUT_ALLOC UNBLOCK_INPUT -#endif /* ! defined HAVE_GTK_AND_PTHREAD */ +#endif /* ! defined HAVE_PTHREAD */ #endif /* ! defined SYSTEM_MALLOC && ! defined SYNC_INPUT */ /* Mark, unmark, query mark bit of a Lisp string. S must be a pointer @@ -1265,7 +1267,7 @@ emacs_blocked_realloc (void *ptr, size_t size, const void *ptr2) } -#ifdef HAVE_GTK_AND_PTHREAD +#ifdef HAVE_PTHREAD /* Called from Fdump_emacs so that when the dumped Emacs starts, it has a normal malloc. Some thread implementations need this as they call malloc before main. The pthread_self call in BLOCK_INPUT_ALLOC then @@ -1278,7 +1280,7 @@ reset_malloc_hooks (void) __malloc_hook = old_malloc_hook; __realloc_hook = old_realloc_hook; } -#endif /* HAVE_GTK_AND_PTHREAD */ +#endif /* HAVE_PTHREAD */ /* Called from main to set up malloc to use our hooks. */ @@ -1286,7 +1288,7 @@ reset_malloc_hooks (void) void uninterrupt_malloc (void) { -#ifdef HAVE_GTK_AND_PTHREAD +#ifdef HAVE_PTHREAD #ifdef DOUG_LEA_MALLOC pthread_mutexattr_t attr; @@ -1300,7 +1302,7 @@ uninterrupt_malloc (void) and the bundled gmalloc.c doesn't require it. */ pthread_mutex_init (&alloc_mutex, NULL); #endif /* !DOUG_LEA_MALLOC */ -#endif /* HAVE_GTK_AND_PTHREAD */ +#endif /* HAVE_PTHREAD */ if (__free_hook != emacs_blocked_free) old_free_hook = __free_hook; diff --git a/src/emacs.c b/src/emacs.c index 39870ec0079..778cf00a527 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -1120,7 +1120,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem #if defined (USG5) && defined (INTERRUPT_INPUT) setpgrp (); #endif -#if defined (HAVE_GTK_AND_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC) +#if defined (HAVE_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC) { extern void malloc_enable_thread (void); @@ -2185,7 +2185,7 @@ You must run Emacs in batch mode in order to dump it. */) memory_warnings (my_edata, malloc_warning); } #endif /* not WINDOWSNT */ -#if defined (HAVE_GTK_AND_PTHREAD) && !defined SYNC_INPUT +#if defined (HAVE_PTHREAD) && !defined SYNC_INPUT /* Pthread may call malloc before main, and then we will get an endless loop, because pthread_self (see alloc.c) calls malloc the first time it is called on some systems. */ diff --git a/src/gmalloc.c b/src/gmalloc.c index fa4aa1fdf6a..916bb300fe1 100644 --- a/src/gmalloc.c +++ b/src/gmalloc.c @@ -37,7 +37,7 @@ Fifth Floor, Boston, MA 02110-1301, USA. #include #endif -#ifdef HAVE_GTK_AND_PTHREAD +#ifdef HAVE_PTHREAD #define USE_PTHREAD #endif diff --git a/src/gtkutil.c b/src/gtkutil.c index 8826b08851a..dd4d99b9d33 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -1907,12 +1907,12 @@ xg_get_file_name (FRAME_PTR f, int filesel_done = 0; xg_get_file_func func; -#if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN) +#if defined (HAVE_PTHREAD) && defined (__SIGRTMIN) /* I really don't know why this is needed, but without this the GLIBC add on library linuxthreads hangs when the Gnome file chooser backend creates threads. */ sigblock (sigmask (__SIGRTMIN)); -#endif /* HAVE_GTK_AND_PTHREAD */ +#endif /* HAVE_PTHREAD */ #ifdef HAVE_GTK_FILE_SELECTION_NEW @@ -1932,7 +1932,7 @@ xg_get_file_name (FRAME_PTR f, filesel_done = xg_dialog_run (f, w); -#if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN) +#if defined (HAVE_PTHREAD) && defined (__SIGRTMIN) sigunblock (sigmask (__SIGRTMIN)); #endif @@ -1960,9 +1960,9 @@ xg_get_font_name (FRAME_PTR f, const char *default_name) char *fontname = NULL; int done = 0; -#if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN) +#if defined (HAVE_PTHREAD) && defined (__SIGRTMIN) sigblock (sigmask (__SIGRTMIN)); -#endif /* HAVE_GTK_AND_PTHREAD */ +#endif /* HAVE_PTHREAD */ w = gtk_font_selection_dialog_new ("Pick a font"); if (!default_name) @@ -1974,7 +1974,7 @@ xg_get_font_name (FRAME_PTR f, const char *default_name) done = xg_dialog_run (f, w); -#if defined (HAVE_GTK_AND_PTHREAD) && defined (__SIGRTMIN) +#if defined (HAVE_PTHREAD) && defined (__SIGRTMIN) sigunblock (sigmask (__SIGRTMIN)); #endif diff --git a/src/keyboard.c b/src/keyboard.c index 7e144b80a09..1c7c22e9f15 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -44,7 +44,7 @@ along with GNU Emacs. If not, see . */ #include "process.h" #include -#ifdef HAVE_GTK_AND_PTHREAD +#ifdef HAVE_PTHREAD #include #endif #ifdef MSDOS diff --git a/src/syssignal.h b/src/syssignal.h index c5c749407cc..7533a5a64fd 100644 --- a/src/syssignal.h +++ b/src/syssignal.h @@ -18,7 +18,7 @@ along with GNU Emacs. If not, see . */ extern void init_signals (void); -#if defined (HAVE_GTK_AND_PTHREAD) || defined (HAVE_NS) +#ifdef HAVE_PTHREAD #include /* If defined, asynchronous signals delivered to a non-main thread are forwarded to the main thread. */