mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Make better use of GNU Pth -- patch by Andy Dustman.
I can't test this, so I'm just checking it in with blind faith in Andy. I've tested that it doesn't broeak a non-Pth build on Linux. Changes include: - There's a --with-pth configure option. - Instead of _GNU_PTH, we test for HAVE_PTH. - Better signal handling. - (The config.h.in file is regenerated in a slightly different order.)
This commit is contained in:
		
							parent
							
								
									0344424793
								
							
						
					
					
						commit
						9e8181b809
					
				
					 7 changed files with 521 additions and 558 deletions
				
			
		|  | @ -111,7 +111,7 @@ | |||
| #define Py_file_input 257 | ||||
| #define Py_eval_input 258 | ||||
| 
 | ||||
| #ifdef _GNU_PTH | ||||
| #ifdef HAVE_PTH | ||||
| /* GNU pth user-space thread support */ | ||||
| #include <pth.h> | ||||
| #endif | ||||
|  |  | |||
|  | @ -62,6 +62,9 @@ | |||
|    handler ignores signals if getpid() isn't the same as in the main | ||||
|    thread.  XXX This is a hack. | ||||
| 
 | ||||
|    GNU pth is a user-space threading library, and as such, all threads | ||||
|    run within the same process. In this case, if the currently running | ||||
|    thread is not the main_thread, send the signal to the main_thread. | ||||
| */ | ||||
| 
 | ||||
| #ifdef WITH_THREAD | ||||
|  | @ -109,6 +112,12 @@ static void | |||
| signal_handler(int sig_num) | ||||
| { | ||||
| #ifdef WITH_THREAD | ||||
| #ifdef WITH_PTH | ||||
| 	if (PyThread_get_thread_ident() != main_thread) { | ||||
| 		pth_raise(*(pth_t *) main_thread, sig_num); | ||||
| 		return; | ||||
| 	} | ||||
| #endif | ||||
| 	/* See NOTES section above */ | ||||
| 	if (getpid() == main_pid) { | ||||
| #endif | ||||
|  |  | |||
|  | @ -109,13 +109,14 @@ void PyThread_init_thread(void) | |||
| #include "thread_lwp.h" | ||||
| #endif | ||||
| 
 | ||||
| #ifdef _GNU_PTH | ||||
| #ifdef HAVE_PTH | ||||
| #include "thread_pth.h" | ||||
| #else | ||||
| #undef _POSIX_THREADS | ||||
| #endif | ||||
| 
 | ||||
| #ifdef _POSIX_THREADS | ||||
| #include "thread_pthread.h" | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| #ifdef C_THREADS | ||||
| #include "thread_cthread.h" | ||||
|  |  | |||
|  | @ -35,9 +35,6 @@ | |||
|    This is the case on Motorola V4 (R40V4.2) */ | ||||
| #undef GETTIMEOFDAY_NO_TZ | ||||
| 
 | ||||
| /* Define if you have GNU PTH threads */ | ||||
| #undef _GNU_PTH | ||||
| 
 | ||||
| /* Define this if your time.h defines altzone */ | ||||
| #undef HAVE_ALTZONE | ||||
| 
 | ||||
|  | @ -65,6 +62,9 @@ | |||
| /* Define if your compiler supports function prototypes */ | ||||
| #undef HAVE_PROTOTYPES | ||||
| 
 | ||||
| /* Define if you have GNU PTH threads */ | ||||
| #undef HAVE_PTH | ||||
| 
 | ||||
| /* Define if your compiler supports variable length function prototypes
 | ||||
|    (e.g. void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */ | ||||
| #undef HAVE_STDARG_PROTOTYPES | ||||
|  |  | |||
							
								
								
									
										20
									
								
								config.h.in
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								config.h.in
									
										
									
									
									
								
							|  | @ -103,9 +103,6 @@ | |||
|    This is the case on Motorola V4 (R40V4.2) */ | ||||
| #undef GETTIMEOFDAY_NO_TZ | ||||
| 
 | ||||
| /* Define if you have GNU PTH threads */ | ||||
| #undef _GNU_PTH | ||||
| 
 | ||||
| /* Define this if your time.h defines altzone */ | ||||
| #undef HAVE_ALTZONE | ||||
| 
 | ||||
|  | @ -130,6 +127,9 @@ | |||
| /* Define if your compiler supports function prototypes */ | ||||
| #undef HAVE_PROTOTYPES | ||||
| 
 | ||||
| /* Define if you have GNU PTH threads */ | ||||
| #undef HAVE_PTH | ||||
| 
 | ||||
| /* Define if your compiler supports variable length function prototypes
 | ||||
|    (e.g. void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */ | ||||
| #undef HAVE_STDARG_PROTOTYPES | ||||
|  | @ -272,6 +272,9 @@ | |||
| /* The number of bytes in a void *.  */ | ||||
| #undef SIZEOF_VOID_P | ||||
| 
 | ||||
| /* Define if you have the _getpty function.  */ | ||||
| #undef HAVE__GETPTY | ||||
| 
 | ||||
| /* Define if you have the alarm function.  */ | ||||
| #undef HAVE_ALARM | ||||
| 
 | ||||
|  | @ -359,9 +362,6 @@ | |||
| /* Define if you have the getpid function.  */ | ||||
| #undef HAVE_GETPID | ||||
| 
 | ||||
| /* Define if you have the _getpty function.  */ | ||||
| #undef HAVE__GETPTY | ||||
| 
 | ||||
| /* Define if you have the getpwent function.  */ | ||||
| #undef HAVE_GETPWENT | ||||
| 
 | ||||
|  | @ -521,14 +521,14 @@ | |||
| /* Define if you have the waitpid function.  */ | ||||
| #undef HAVE_WAITPID | ||||
| 
 | ||||
| /* Define if you have the <db_185.h> header file.  */ | ||||
| #undef HAVE_DB_185_H | ||||
| /* Define if you have the <db.h> header file.  */ | ||||
| #undef HAVE_DB_H | ||||
| 
 | ||||
| /* Define if you have the <db1/ndbm.h> header file.  */ | ||||
| #undef HAVE_DB1_NDBM_H | ||||
| 
 | ||||
| /* Define if you have the <db.h> header file.  */ | ||||
| #undef HAVE_DB_H | ||||
| /* Define if you have the <db_185.h> header file.  */ | ||||
| #undef HAVE_DB_185_H | ||||
| 
 | ||||
| /* Define if you have the <dirent.h> header file.  */ | ||||
| #undef HAVE_DIRENT_H | ||||
|  |  | |||
							
								
								
									
										13
									
								
								configure.in
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								configure.in
									
										
									
									
									
								
							|  | @ -745,6 +745,15 @@ else | |||
|     AC_CHECK_HEADER(mach/cthreads.h, [AC_DEFINE(WITH_THREAD) | ||||
|     AC_DEFINE(C_THREADS) | ||||
|     LIBOBJS="$LIBOBJS thread.o"],[ | ||||
|     AC_MSG_CHECKING(for --with-pth) | ||||
|     AC_ARG_WITH(pth, | ||||
|     [  --with-pth                      use GNU pth threading libraries], [ | ||||
|     AC_MSG_RESULT($withval) | ||||
|     AC_DEFINE(WITH_THREAD) | ||||
|     AC_DEFINE(HAVE_PTH) | ||||
|     LIBS="-lpth $LIBS" | ||||
|     LIBOBJS="$LIBOBJS thread.o"],[ | ||||
|     AC_MSG_RESULT(no) | ||||
|     AC_CHECK_LIB(pthread, pthread_create, [AC_DEFINE(WITH_THREAD) | ||||
|     AC_DEFINE(_POSIX_THREADS) | ||||
|     LIBS="-lpthread $LIBS" | ||||
|  | @ -767,10 +776,6 @@ else | |||
|     AC_DEFINE(_POSIX_THREADS) | ||||
|     LIBS="$LIBS -lthread" | ||||
|     LIBOBJS="$LIBOBJS thread.o"], [ | ||||
|     AC_CHECK_LIB(pth, pth_init, [AC_DEFINE(WITH_THREAD) | ||||
|     AC_DEFINE(_GNU_PTH) | ||||
|     LIBS="-lpth $LIBS" | ||||
|     LIBOBJS="$LIBOBJS thread.o"],[ | ||||
|     AC_CHECK_LIB(cma, pthread_create, [AC_DEFINE(WITH_THREAD) | ||||
|     AC_DEFINE(_POSIX_THREADS) | ||||
|     LIBS="$LIBS -lcma" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum