Bugs item #1441884, was opened at 2006-03-02 18:17 Message generated for change (Comment added) made by loewis You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1441884&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Threads Group: Python 2.3 Status: Open Resolution: None Priority: 5 Submitted By: Robert Kiendl (kxroberto) Assigned to: Nobody/Anonymous (nobody) Summary: A (treaded) Python crash only on dual core machines Initial Comment: There is a strange freeze/crash only on dual core machines: I have a python app (Python 2.3.5 /Pythonwin build 203 / Windows) running with no stability problems on normal machines (Or a crash is so rare, that absolutely nobody obverses it, though the overall majority of users uses single core machines). Threads, network & pythonwin/win32ui all in use. Yet, from 3 users, _all_ using a Dual Processor System (XEON, amd x2 3800+) computer, I have reports, that the application freezes hard and/or crashes with a kind of random stack dump (operating system). I cannot experiment with those machines. I found no hints other than: http://groups.google.de/group/comp.lang.python/browse_frm/thread/64ca033e1a7f6c61/719b147e870bd5e6 http://sourceforge.net/tracker/?group_id=5470&atid=105470&func=detail&aid=480325 .. both discussions remaining in uncertainty. Are there (known) problems with Python/Pythonwin specifically for dual core's (py2.3.5 / pywin203) ? What could I do to find the problem? Robert -------------- PS: there is very little C extension-code (SWIG) involved, yet I looked over that so often, I guess its save: // #include "stdafx.h" #include "commctrl.h" #include "ext.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } class CAllowThreads { public: PyThreadState *_save; \ CAllowThreads() { _save = PyEval_SaveThread(); } ~CAllowThreads() { PyEval_RestoreThread(_save); } }; PyObject* PyListView_GetSubItemRect( HWND hwndLV, int iItem, int iSubItem, int code // LPRECT lpRect ) { RECT r; { CAllowThreads _t; ListView_GetSubItemRect( hwndLV, iItem, iSubItem, code, &r ); } return Py_BuildValue("iiii", r.left,r.top,r.right,r.bottom); } int GetStringAddr(const char* s) { return (int)s; } int PlaySoundResource(int resid, HMODULE hmod) { CAllowThreads _t; return PlaySound(MAKEINTRESOURCE(resid), hmod, SND_RESOURCE); } int PlaySoundFile(const char* fname, int flag) { CAllowThreads _t; return PlaySound(fname, NULL, flag); } PyObject* py_ToolTipRelayMsg( PyObject* self, PyObject* args ) { MSG msg; HWND hwTT; if(!PyArg_ParseTuple(args,"i(iiiii(ii)):ToolTipRelayMsg", &hwTT, &msg.hwnd,&msg.message,&msg.wParam,&msg.lParam,&msg.time, &msg.pt, ((int*)&msg.pt)+1) ) return NULL; { CAllowThreads _t; SendMessage(hwTT,TTM_RELAYEVENT,0,(LPARAM)&msg); } Py_INCREF( Py_None ); return Py_None; } --- "GetStringAddress" is used only once like this (leades to correct NUL termination I think): self.sb.SendMessage(commctrl.SB_SETTEXT,iPane,extension.GetStringAddr(text)) --- swig: static PyObject *_wrap_GetStringAddr(PyObject *self, PyObject *args) { PyObject *resultobj; char *arg0 ; int result ; if(!PyArg_ParseTuple(args,(char *)"s:GetStringAddr",&arg0)) return NULL; result = (int )GetStringAddr((char const *)arg0); resultobj = PyInt_FromLong((long)result); return resultobj; } ---------------------------------------------------------------------- >Comment By: Martin v. Löwis (loewis) Date: 2006-03-03 18:40 Message: Logged In: YES user_id=21627 You don't provide complete source code for anybody to try to reproduce this problem. My guess is that you are calling into the Python runtime without holding the global interpreter lock. This can easily create all sorts of problems. Never release the GIL unless you are absolutely certain that no Python code will be executed; neither directly nor indirectly. Don't invoke Python API in a thread (e.g. while processing a Windows message) without acquiring the GIL first. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1441884&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com