|
From: David B. <dav...@us...> - 2004-12-02 07:59:42
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7246 Modified Files: Tag: sidewinder-branch langpython.c Log Message: added call to langbackgroundtask in our trace routine Index: langpython.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/langpython.c,v retrieving revision 1.2.4.25 retrieving revision 1.2.4.26 diff -C2 -d -r1.2.4.25 -r1.2.4.26 *** langpython.c 30 Nov 2004 10:48:05 -0000 1.2.4.25 --- langpython.c 2 Dec 2004 07:59:33 -0000 1.2.4.26 *************** *** 46,49 **** --- 46,50 ---- #include "kernelverbdefs.h" //#include "timedate.h" + #include "kb.h" #ifdef MACVERSION *************** *** 64,67 **** --- 65,69 ---- #include <compile.h> #include <frameobject.h> + #include <pystate.h> #elif defined(MACVERSION) *************** *** 74,77 **** --- 76,80 ---- #include <Python/compile.h> #include <Python/frameobject.h> + #include <Python/pystate.h> #elif TARGET_RT_MAC_CFM *************** *** 195,202 **** --- 198,207 ---- PyObject ** ptr_PyExc_TypeError; PyObject ** ptr_PyExc_ValueError; + PyObject ** ptr_PyExc_KeyboardInterrupt; void (*ptr_PyErr_Clear) (void); PyObject * (*ptr_PyErr_Occurred) (void); void (*ptr_PyErr_Print) (void); void (*ptr_PyErr_SetString) (PyObject *, const char *); + void (*ptr_PyErr_SetInterrupt) (void); void (*ptr_Py_Finalize) (); /*pythonrun.h*/ *************** *** 227,233 **** --- 232,242 ---- PyThreadState * (*ptr_PyEval_SaveThread) (void); void (*ptr_PyEval_SetProfile) (Py_tracefunc, PyObject *); + void (*ptr_PyEval_SetTrace) (Py_tracefunc, PyObject *); void (*ptr_PyEval_InitThreads) (void); void (*ptr_PyEval_AcquireLock) (void); void (*ptr_PyEval_ReleaseLock) (void); + + PyGILState_STATE (*ptr_PyGILState_Ensure) (void); + void (*ptr_PyGILState_Release) (PyGILState_STATE); } py; *************** *** 307,310 **** --- 316,320 ---- #define PyErr_Print (*py.ptr_PyErr_Print) #define PyErr_SetString (*py.ptr_PyErr_SetString) + #define PyErr_SetInterrupt (*py.ptr_PyErr_SetInterrupt) #define Py_Finalize (*py.ptr_Py_Finalize) *************** *** 334,341 **** --- 344,357 ---- #define PyEval_RestoreThread (*py.ptr_PyEval_RestoreThread) #define PyEval_SetProfile (*py.ptr_PyEval_SetProfile) + #define PyEval_SetTrace (*py.ptr_PyEval_SetTrace) #define PyEval_InitThreads (*py.ptr_PyEval_InitThreads) #define PyEval_AcquireLock (*py.ptr_PyEval_AcquireLock) #define PyEval_ReleaseLock (*py.ptr_PyEval_ReleaseLock) + #define PyExc_KeyboardInterrupt (*py.ptr_PyExc_KeyboardInterrupt) + + #define PyGILState_Ensure (*py.ptr_PyGILState_Ensure) + #define PyGILState_Release (*py.ptr_PyGILState_Release) + static boolean importsymbol (typythonlib hm, char *symbol, void **ptraddress) { *************** *** 449,452 **** --- 465,469 ---- fl = fl && IMPORTSYMBOL (hm, PyErr_Print); fl = fl && IMPORTSYMBOL (hm, PyErr_SetString); + fl = fl && IMPORTSYMBOL (hm, PyErr_SetInterrupt); fl = fl && IMPORTSYMBOL (hm, Py_Finalize); *************** *** 477,484 **** --- 494,506 ---- fl = fl && IMPORTSYMBOL (hm, PyEval_RestoreThread); fl = fl && IMPORTSYMBOL (hm, PyEval_SetProfile); + fl = fl && IMPORTSYMBOL (hm, PyEval_SetTrace); fl = fl && IMPORTSYMBOL (hm, PyEval_InitThreads); fl = fl && IMPORTSYMBOL (hm, PyEval_AcquireLock); fl = fl && IMPORTSYMBOL (hm, PyEval_ReleaseLock); + fl = fl && IMPORTSYMBOL (hm, PyExc_KeyboardInterrupt); + fl = fl && IMPORTSYMBOL (hm, PyGILState_Ensure); + fl = fl && IMPORTSYMBOL (hm, PyGILState_Release); + if (fl) { *************** *** 552,558 **** --- 574,583 ---- static boolean locked = true; static int lockCount = 0; + //PyGILState_STATE gstate; static void getpythonlock() { + //gstate = PyGILState_Ensure(); + //* lockCount++; *************** *** 562,569 **** --- 587,597 ---- locked = true; PyEval_AcquireLock(); + // */ } static void releasepythonlock() { + //PyGILState_Release(gstate); + //* if (lockCount == 0) return; *************** *** 574,577 **** --- 602,606 ---- PyEval_ReleaseLock(); } + // */ } *************** *** 1656,1660 **** static int checkstatus(PyObject *o, PyFrameObject *frame, int what, PyObject *arg) { ! //langbackgroundtask(false); return 0; } --- 1685,1694 ---- static int checkstatus(PyObject *o, PyFrameObject *frame, int what, PyObject *arg) { ! //printf("check\n"); ! //if (keyboardescape()) { ! if (!langbackgroundtask(false)) { ! //printf("hit\n"); ! PyErr_SetInterrupt(); ! } return 0; } *************** *** 1667,1670 **** --- 1701,1705 ---- Py_Initialize(); PyEval_InitThreads(); + //getpythonlock(); initGlobals(); *************** *** 1676,1680 **** currentCookie = time(NULL); ! PyEval_SetProfile(checkstatus, NULL); releasepythonlock(); --- 1711,1715 ---- currentCookie = time(NULL); ! PyEval_SetTrace(checkstatus, NULL); releasepythonlock(); |