cpython/Python
Tim Peters 2e7e7df969 An Anonymous Coward on c.l.py posted a little program with bizarre
behavior, creating many threads very quickly.  A long debugging session
revealed that the Windows implementation of PyThread_start_new_thread()
was choked with "laziness" errors:

1. It checked MS _beginthread() for a failure return, but when that
   happened it returned heap trash as the function result, instead of
   an id of -1 (the proper error-return value).

2. It didn't consider that the Win32 CreateSemaphore() can fail.

3. When creating a great many threads very quickly, it's quite possible
   that any particular bootstrap call can take virtually any amount of
   time to return.  But the code waited for a maximum of 5 seconds, and
   didn't check to see whether the semaphore it was waiting for got
   signaled.  If it in fact timed out, the function could again return
   heap trash as the function result.  This is actually what confused
   the test program, as the heap trash usually turned out to be 0, and
   then multiple threads all got id 0 simultaneously, confusing the
   hell out of threading.py's _active dict (mapping id to thread
   object).  A variety of baffling behaviors followed from that.

WRT #1 and #2, error returns are checked now, and "thread.error: can't
start new thread" gets raised now if a new thread (or new semaphore)
can't be created.  WRT #3, we now wait for the semaphore without a
timeout.

Also removed useless local vrbls, folded long lines, and changed callobj
to a stack auto (it was going thru malloc/free instead, for no discernible
reason).

Bugfix candidate.
2003-07-04 04:40:45 +00:00
..
.cvsignore
atof.c Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774. 2001-07-26 13:41:06 +00:00
bltinmodule.c some more error-message enhancements 2003-04-23 13:34:35 +00:00
ceval.c Fix SF #762455, segfault when sys.stdout is changed in getattr 2003-06-29 14:48:32 +00:00
codecs.c Fixed SF bug #663074. The codec system was using global static 2003-03-19 00:35:36 +00:00
compile.c Removed bytecode transformation for sequence packing/unpacking. 2003-06-20 16:13:17 +00:00
dup2.c Mass ANSIfication of function definitions. Doesn't cover all 'extern' 2000-07-22 18:47:25 +00:00
dynload_aix.c Include Python.h first which defines _XOPEN_SOURCE 2003-03-22 16:35:37 +00:00
dynload_atheos.c Patch #488073: AtheOS port. 2002-06-11 06:22:31 +00:00
dynload_beos.c Fix for 2002-01-23 15:51:12 +00:00
dynload_dl.c Use PyOS_snprintf instead of sprintf. 2001-11-28 20:42:20 +00:00
dynload_hpux.c Fix SF # 551504, python -v sometimes fails to find init (HPUX) 2002-11-02 20:58:05 +00:00
dynload_mac.c Got rid of old (non-carbon-ppc and even cfm68k) file extensions for 2002-12-16 13:16:25 +00:00
dynload_next.c Squashed compiler warnings by adding casts, making sure prototypes are in 2002-12-23 21:03:36 +00:00
dynload_os2.c Use PyOS_snprintf instead of sprintf. 2001-11-28 20:42:20 +00:00
dynload_shlib.c Patch #708495: Port more stuff to OpenVMS. 2003-05-03 09:14:54 +00:00
dynload_stub.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
dynload_win.c Fix a couple of whitespace consistency nits. 2002-08-26 21:20:30 +00:00
errors.c PyErr_NormalizeException(): in the type==NULL test, we should simply 2003-04-10 20:29:48 +00:00
exceptions.c Remove unused variables. 2003-02-24 15:33:31 +00:00
fmod.c Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774. 2001-07-26 13:41:06 +00:00
frozen.c This is my patch 2002-08-15 14:59:02 +00:00
frozenmain.c Patch #569753: Remove support for WIN16. 2002-06-30 15:26:10 +00:00
future.c Constify filenames and scripts. Fixes #651362. 2002-12-11 14:04:59 +00:00
getargs.c Patch #684981: Add cleanup capability for argument parsers. Fixes 501716. 2003-05-03 10:00:22 +00:00
getcompiler.c The GCC version is loooooooooong; put it on a new line. 2000-09-05 04:40:39 +00:00
getcopyright.c Another copyright update. (JvR: can you backport this to the 2.3a1 2003-01-02 16:27:15 +00:00
getcwd.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
getmtime.c Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774. 2001-07-26 13:41:06 +00:00
getopt.c Move our own getopt() implementation to _PyOS_GetOpt(), and use it 2000-11-03 08:18:37 +00:00
getplatform.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
getversion.c Use PyOS_snprintf instead of sprintf. 2001-11-28 20:42:20 +00:00
graminit.c Patch #534304: Implement phase 1 of PEP 263. 2002-08-04 17:29:52 +00:00
hypot.c Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774. 2001-07-26 13:41:06 +00:00
import.c Don't use the module object setattr when importing submodules. Instead, 2003-06-16 21:03:07 +00:00
importdl.c Simplify, and avoid PyModule_GetDict() while we're at it. 2002-08-26 21:15:11 +00:00
importdl.h PEP 302 + zipimport: 2002-12-30 22:08:05 +00:00
mactoolboxglue.c Added functions CFObj_New and CFObj_Convert, general functions to convert 2003-05-27 21:39:58 +00:00
marshal.c Whitespace normalization. 2002-07-30 11:44:44 +00:00
memmove.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
modsupport.c Better error message 2003-06-21 21:35:25 +00:00
mysnprintf.c PyOS_vsnprintf(): Change PyMem_Malloc() call to PyMem_MALLOC() macro, 2001-12-21 16:32:15 +00:00
mystrtoul.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
pyfpe.c Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774. 2001-07-26 13:41:06 +00:00
pystate.c Add PyThreadState_SetAsyncExc(long, PyObject *). 2003-06-28 21:53:52 +00:00
pythonrun.c PyGILState cleanup was too early - destructors called via module cleanup may use the API. 2003-04-22 11:18:00 +00:00
sigcheck.c REMOVED all CWI, CNRI and BeOpen copyright markings. 2000-09-01 23:29:29 +00:00
strdup.c Mass ANSIfication of function definitions. Doesn't cover all 'extern' 2000-07-22 18:47:25 +00:00
strerror.c Use PyOS_snprintf instead of sprintf. 2001-11-28 20:42:20 +00:00
strtod.c Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774. 2001-07-26 13:41:06 +00:00
structmember.c Fix SF bug #486144: Uninitialized __slot__ vrbl is None. 2001-12-04 16:23:42 +00:00
symtable.c Fix for SF [ 734869 ] Lambda functions in list comprehensions 2003-05-21 17:34:50 +00:00
sysmodule.c Patch #612627: Add encoding attribute to file objects, and determine 2003-05-10 07:10:12 +00:00
thread.c New PyGILState_ API - implements pep 311, from patch 684256. 2003-04-19 15:41:53 +00:00
thread_atheos.h Patch #488073: AtheOS port. 2002-06-11 06:22:31 +00:00
thread_beos.h Remove the unused & broken PyThread_*_sema() functions and related constants. 2002-01-19 22:02:55 +00:00
thread_cthread.h Remove the unused & broken PyThread_*_sema() functions and related constants. 2002-01-19 22:02:55 +00:00
thread_foobar.h Remove the unused & broken PyThread_*_sema() functions and related constants. 2002-01-19 22:02:55 +00:00
thread_lwp.h Remove the unused & broken PyThread_*_sema() functions and related constants. 2002-01-19 22:02:55 +00:00
thread_nt.h An Anonymous Coward on c.l.py posted a little program with bizarre 2003-07-04 04:40:45 +00:00
thread_os2.h reformat for PEP-7 style conformance 2002-12-04 12:29:37 +00:00
thread_pth.h Remove the unused & broken PyThread_*_sema() functions and related constants. 2002-01-19 22:02:55 +00:00
thread_pthread.h Patch #716969: Detect thread creation failure. Will backport to 2.2. 2003-04-19 07:44:52 +00:00
thread_sgi.h New PyGILState_ API - implements pep 311, from patch 684256. 2003-04-19 15:41:53 +00:00
thread_solaris.h Patch #716969: Detect thread creation failure. Will backport to 2.2. 2003-04-19 07:44:52 +00:00
thread_wince.h Partial patch from SF #452266, by Jason Petrone. 2001-10-16 21:13:49 +00:00
traceback.c After the removal of SET_LINENO, PyCode_Addr2Line has always been 2003-02-22 13:07:53 +00:00