From: <ol...@us...> - 2009-04-29 09:36:02
|
Revision: 11192 http://swig.svn.sourceforge.net/swig/?rev=11192&view=rev Author: olly Date: 2009-04-29 09:35:58 +0000 (Wed, 29 Apr 2009) Log Message: ----------- [Python] Don't attempt to acquire the GIL in situations where we know that it will already be locked. This avoids some dead-locks with mod_python (due to mod_python bugs which are apparently unlikely to ever be fixed), and results in smaller wrappers which run a little faster (in tests with Xapian on x86-64 Ubuntu 9.04, the stripped wrapper library was 11% smaller and ran 2.7% faster). Modified Paths: -------------- trunk/CHANGES.current trunk/Source/Modules/python.cxx Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2009-04-21 20:09:15 UTC (rev 11191) +++ trunk/CHANGES.current 2009-04-29 09:35:58 UTC (rev 11192) @@ -1,6 +1,14 @@ Version 1.3.40 (in progress) ============================ +2009-04-29: olly + [Python] Don't attempt to acquire the GIL in situations where we + know that it will already be locked. This avoids some dead-locks + with mod_python (due to mod_python bugs which are apparently + unlikely to ever be fixed), and results in smaller wrappers which + run a little faster (in tests with Xapian on x86-64 Ubuntu 9.04, + the stripped wrapper library was 11% smaller and ran 2.7% faster). + 2009-04-21: wsfulton [C#] Fix #2753469 - bool &OUTPUT and bool *OUTPUT typemaps initialisation. Modified: trunk/Source/Modules/python.cxx =================================================================== --- trunk/Source/Modules/python.cxx 2009-04-21 20:09:15 UTC (rev 11191) +++ trunk/Source/Modules/python.cxx 2009-04-29 09:35:58 UTC (rev 11192) @@ -1739,7 +1739,6 @@ /* Last node in overloaded chain */ int maxargs; - int allow_thread = threads_enable(n); String *tmp = NewString(""); String *dispatch; @@ -1762,8 +1761,6 @@ Wrapper_add_local(f, "argc", "int argc"); Printf(tmp, "PyObject *argv[%d]", maxargs + 1); Wrapper_add_local(f, "argv", tmp); - if (allow_thread) - thread_begin_block(n, f->code); if (!fastunpack) { Wrapper_add_local(f, "ii", "int ii"); @@ -1780,19 +1777,8 @@ Replaceall(dispatch, "$args", "self,args"); - if (allow_thread) { - String *ret = NewStringEmpty(); - thread_end_block(n, ret); - Append(ret, "return "); - Replaceall(dispatch, "return ", ret); - Delete(ret); - } - Printv(f->code, dispatch, "\n", NIL); - if (allow_thread) - thread_end_block(n, f->code); - if (GetFlag(n, "feature:python:maybecall")) { Append(f->code, "fail:\n"); Append(f->code, "Py_INCREF(Py_NotImplemented);\n"); @@ -1899,8 +1885,6 @@ kwargs = NewString(""); int allow_thread = threads_enable(n); - if (allow_thread) - thread_begin_block(n, f->code); Wrapper_add_local(f, "resultobj", "PyObject *resultobj = 0"); @@ -2331,8 +2315,6 @@ } } - if (allow_thread) - thread_end_block(n, f->code); Append(f->code, " return resultobj;\n"); /* Error handling code */ @@ -2341,8 +2323,6 @@ if (need_cleanup) { Printv(f->code, cleanup, NIL); } - if (allow_thread) - thread_end_block(n, f->code); Printv(f->code, " return NULL;\n", NIL); @@ -3858,10 +3838,8 @@ int allow_thread = threads_enable(n); - if (allow_thread) - thread_begin_block(n, w->code); - if (allow_thread) { + thread_begin_block(n, w->code); Append(w->code, "{\n"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |