Bugs item #1165761, was opened at 2005-03-18 05:18 Message generated for change (Comment added) made by mwh You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1165761&group_id=5470
Category: Threads Group: Python 2.4 Status: Open Resolution: None Priority: 5 Submitted By: Jeff Stearns (jeffstearns) Assigned to: Nobody/Anonymous (nobody) Summary: KeyboardInterrupt causes segmentation fault with threads Initial Comment: The attached sample program crashes Python 2.4.1c1 with a segmentation fault if it is interupted. I wrote a simple program which simulates multiple HTTP clients. The program is mult-threaded. It runs on Debian with a 2.6 kernel. If the program is interrupted (via ^C), Python 2.4.1c1 takes a segmentation fault. Investigation with gdb shows that the error occurs within PyEval_EvalFrame at line 1661 below. It's executing an END_FINALLY bytecode. The offending statement is v = POP(); The value of v is 0. This is then passed to PyInt_Check(), which attempts to dereference a NULL pointer. 1659 case END_FINALLY: 1660 v = POP(); 1661 if (PyInt_Check(v)) { 1662 why = (enum why_code) PyInt_AS_LONG(v); 1663 assert(why != WHY_YIELD); 1664 if (why == WHY_RETURN || 1665 why == WHY_CONTINUE) 1666 retval = POP(); 1667 } #0 PyEval_EvalFrame (f=0x821cd04) at Python/ceval.c:1661 #1 0x080ae6bd in fast_function (func=0x4030df8d, pp_stack=0xbfffe85c, n=1, na=1076944740, nk=1079484852) at Python/ceval.c:3629 #2 0x080ae254 in call_function (pp_stack=0xbfffe85c, oparg=1076944740) at Python/ceval.c:3568 #3 0x080ac7a6 in PyEval_EvalFrame (f=0x8227d04) at Python/ ceval.c:2163 #4 0x080ad21e in PyEval_EvalCodeEx (co=0x4037e660, globals=0x4030df64, locals=0x4030df8d, args=0x40295c78, argcount=1, kws=0x0, kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:2730 #5 0x08105647 in function_call (func=0x4038a304, arg=0x40295c6c, kw=0x0) at Objects/funcobject.c:548 #6 0x0805c409 in PyObject_Call (func=0x8148088, arg=0x4030df64, kw=0x4030df64) at Objects/abstract.c:1751 #7 0x08062e38 in instancemethod_call (func=0x4038a304, arg=0x40295c6c, kw=0x4030df64) at Objects/classobject.c:2431 #8 0x0805c409 in PyObject_Call (func=0x8148088, arg=0x4030df64, kw=0x4030df64) at Objects/abstract.c:1751 #9 0x080ae0e7 in PyEval_CallObjectWithKeywords (func=0x4030df64, arg=0x4028702c, kw=0x405785a4) at Python/ ceval.c:3419 #10 0x0809101c in slot_tp_del (self=0x4057a1b4) at Objects/ typeobject.c:4818 #11 0x08086f93 in subtype_dealloc (self=0x4057a1b4) at Objects/ typeobject.c:669 #12 0x08062a4c in instancemethod_dealloc (im=0x4057857c) at Objects/classobject.c:2225 #13 0x080790a4 in dict_dealloc (mp=0x4056aacc) at Objects/ dictobject.c:734 #14 0x0805e544 in instance_dealloc (inst=0x40569dcc) at Objects/ classobject.c:687 #15 0x081042cb in frame_dealloc (f=0x8218f14) at Objects/ frameobject.c:418 #16 0x080dc1e9 in PyThreadState_Clear (tstate=0x81f9820) at Python/pystate.c:217 #17 0x080dbdf8 in PyInterpreterState_Clear (interp=0x8148048) at Python/pystate.c:93 #18 0x080dcef2 in Py_Finalize () at Python/pythonrun.c:408 #19 0x08055391 in Py_Main (argc=1, argv=0xbfffee14) at Modules/ main.c:504 #20 0x08054eeb in main (argc=1076944740, argv=0x4030df64) at Modules/python.c:23 ---------------------------------------------------------------------- >Comment By: Michael Hudson (mwh) Date: 2005-03-18 15:30 Message: Logged In: YES user_id=6656 Chop chop chop. Attached seems fairly minimal. It's something to do with exception handling in __del__ methods that are called during interpreter tear down. ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2005-03-18 14:53 Message: Logged In: YES user_id=6656 Duh, most of that was in the original report :) ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2005-03-18 14:52 Message: Logged In: YES user_id=6656 And on linux too. Gdb poking finds that the crash is in socket._fileobject.close which is being called from socket._fileobject.__del__ which is being called from ... PyThreadState_Clear, PyInterpreterState_Clear, Py_Finalize. So I still think it's some kind of tear-down horror. Hmm. ---------------------------------------------------------------------- Comment By: Jarek Zgoda (zgoda) Date: 2005-03-18 14:15 Message: Logged In: YES user_id=92222 2.4 crashes also on Windows. ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2005-03-18 09:56 Message: Logged In: YES user_id=6656 Oh, and I should say, I'm on OS X. ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2005-03-18 09:53 Message: Logged In: YES user_id=6656 Does this always dump core for you? When I ^C CVS HEAD running this a variety of nasty things happen, including one core dump and one "Fatal Python error: PyImport_GetModuleDict: no module dictionary!", but more often it's something like: cccc^CTraceback (most recent call last): File "/Users/mwh/Desktop/thread_crash.py", line 67, in ? main(sys.argv) File "/Users/mwh/Desktop/thread_crash.py", line 64, in main run (20) File "/Users/mwh/Desktop/thread_crash.py", line 56, in run thread.start () File "/Users/mwh/Source/python/dist/src/Lib/threading.py", line 418, in start _sleep(0.000001) # 1 usec, to let the thread run (Solaris hack) KeyboardInterrupt Exception in thread Thread-4 (most likely raised during interpreter shutdown): Traceback (most recent call last): File "/Users/mwh/Source/python/dist/src/Lib/threading.py", line 442, in __bootstrap File "/Users/mwh/Source/python/dist/src/Lib/threading.py", line 422, in run File "/Users/mwh/Desktop/thread_crash.py", line 23, in run File "/Users/mwh/Desktop/thread_crash.py", line 33, in runOnce File "/Users/mwh/Source/python/dist/src/Lib/urllib2.py", line 129, in urlopen File "/Users/mwh/Source/python/dist/src/Lib/urllib2.py", line 439, in build_opener File "/Users/mwh/Source/python/dist/src/Lib/urllib2.py", line 291, in add_handler <class 'exceptions.TypeError'>: 'NoneType' object is not callable Unhandled exception in thread started by Error in sys.excepthook: Original exception was: Exception in thread Thread-2 (most likely raised during interpreter shutdown): Traceback (most recent call last): File "/Users/mwh/Source/python/dist/src/Lib/threading.py", line 442, in __bootstrap File "/Users/mwh/Source/python/dist/src/Lib/threading.py", line 422, in run File "/Users/mwh/Desktop/thread_crash.py", line 23, in run File "/Users/mwh/Desktop/thread_crash.py", line 33, in runOnce File "/Users/mwh/Source/python/dist/src/Lib/urllib2.py", line 129, in urlopen File "/Users/mwh/Source/python/dist/src/Lib/urllib2.py", line 439, in build_opener File "/Users/mwh/Source/python/dist/src/Lib/urllib2.py", line 291, in add_handler <class 'exceptions.TypeError'>: 'NoneType' object is not callable Unhandled exception in thread started by Error in sys.excepthook: Original exception was: with the last bit repeated a few times. At a guess, it's some kind of interpreter tear-down horror. Python 2.3 seems to behave much more sensibly. ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2005-03-18 09:00 Message: Logged In: YES user_id=6656 Can you try 2.3? There were some changes in the area for 2.4. I'll try to poke at it too. ---------------------------------------------------------------------- Comment By: Jeff Stearns (jeffstearns) Date: 2005-03-18 06:44 Message: Logged In: YES user_id=660929 The bug also exists when Python is compiled with --with-pydebug: % ./python2.4 -c 'import clientLoadSimulator; clientLoadSimulator.run(20)' cccccccccccccCc.cCcCccCcc.CCC..CCC......C...........C.C..Traceback (most recent call last): File "<string>", line 1, in ? File "clientLoadSimulator.py", line 67, in run thread.join (1.0) File "/usr/local/lib/python2.4/threading.py", line 550, in join self.__block.wait(delay) File "/usr/local/lib/python2.4/threading.py", line 222, in wait _sleep(delay) KeyboardInterrupt [29492 refs] Segmentation fault (core dumped) ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1165761&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com