FreeBSD Bugzilla – Attachment 165638 Details for
Bug 204793
www/mod_python35: Fatal Python error: PyEval_SaveThread: NULL tstate
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch-mod_python35
patch-mod_python35.diff (text/plain), 15.53 KB, created by
SBB
on 2016-01-15 18:34:35 UTC
(
hide
)
Description:
patch-mod_python35
Filename:
MIME Type:
Creator:
SBB
Created:
2016-01-15 18:34:35 UTC
Size:
15.53 KB
patch
obsolete
>Index: files/patch-mod_python35 >=================================================================== >--- files/patch-mod_python35 (revision 406184) >+++ files/patch-mod_python35 (working copy) >@@ -1,341 +1,28 @@ >-diff -nru ./Doc/Makefile.in ./Doc/Makefile.in >---- ./Doc/Makefile.in 2013-11-12 04:21:34.000000000 +0100 >-+++ ./Doc/Makefile.in 2014-04-15 17:27:39.000000000 +0200 >-@@ -16,7 +16,7 @@ >- $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES) >+--- src/mod_python.c.orig 2016-01-15 18:08:48 UTC >++++ src/mod_python.c >+@@ -772,8 +772,15 @@ static int python_init(apr_pool_t *p, ap >+ { >+ initialized = 1; > >- .PHONY: help checkout update build html htmlhelp latex text changes linkcheck \ >-- suspicious coverage htmlview distclean clean dist check serve \ >-+ suspicious coverage htmlview clean dist check serve \ >- autobuild-dev autobuild-stable >+- /* initialze the interpreter */ >++ /* Initialze the main interpreter. We do not want site.py to >++ * be imported because as of Python 2.7.9 it would cause a >++ * circular dependency related to _locale which breaks >++ * graceful restart so we set Py_NoSiteFlag to 1 just for this >++ * one time. (https://github.com/grisha/mod_python/issues/46) >++ */ >++ Py_NoSiteFlag = 1; >+ Py_Initialize(); >++ Py_NoSiteFlag = 0; > >- help: >-@@ -102,8 +102,6 @@ >- htmlview: html >- $(PYTHON) -c "import webbrowser; webbrowser.open('build/html/index.html')" >+ #ifdef WITH_THREAD >+ /* create and acquire the interpreter lock */ >+@@ -2646,7 +2653,7 @@ static void PythonChildInitHandler(apr_p >+ * problems as well. Thus disable cleanup of Python when >+ * child processes are being shutdown. (MODPYTHON-109) >+ * >+- apr_pool_cleanup_register(p, NULL, python_finalize, apr_pool_cleanup_null); >++ * apr_pool_cleanup_register(p, NULL, python_finalize, apr_pool_cleanup_null); >+ */ > >--distclean: clean >-- >- clean: >- -rm -rf build/* >- -rm -rf tools/sphinx >-diff -nru ./Doc/changes.rst ./Doc/changes.rst >---- ./Doc/changes.rst 2013-11-12 04:21:34.000000000 +0100 >-+++ ./Doc/changes.rst 2014-04-15 17:27:39.000000000 +0200 >-@@ -5,22 +5,6 @@ >- Changes >- ******* >- >--.. _changes_from_3_4_1: >-- >--Changes from version 3.4.1 >--========================== >-- >--New Features >-------------- >-- >--* Support for Python 3.3 >-- >--Improvements >-------------- >-- >--* Simpler, faster and up-to-date with latest Python code for creating/maintaining interpreter and thread state. >--* A much faster WSGI implementation (start_response now implemented in C) >-- >- .. _changes_from_3_3_1: >- >- Changes from version 3.3.1 >-diff -nru ./NEWS ./NEWS >---- ./NEWS 2013-11-12 04:21:34.000000000 +0100 >-+++ ./NEWS 2014-04-15 17:27:39.000000000 +0200 >-@@ -1,3 +1,5 @@ >-+Nov 13 2013 - 3.5.0 released >-+ >- Oct 22 2013 - 3.4.1 released >- >- Jan 29 2007 - 3.3.1 is being tagged >-diff -nru ./configure ./configure >---- ./configure 2013-11-12 04:21:34.000000000 +0100 >-+++ ./configure 2014-04-15 17:27:39.000000000 +0200 >-@@ -3340,11 +3340,7 @@ >- PyMINVERSION=`$PYTHON_BIN -c 'import sys; print(sys.version.split(".")[1])'` >- { $as_echo "$as_me:$LINENO: result: $PyVERSION" >&5 >- $as_echo "$PyVERSION" >&6; } >--if test -z "$PyMAJVERSION"; then >-- { { $as_echo "$as_me:$LINENO: error: Unable to get Python version - is your Python working?" >&5 >--$as_echo "$as_me: error: Unable to get Python version - is your Python working?" >&2;} >-- { (exit 1); exit 1; }; } >--fi >-+ >- # make sure Python version is >= 2.6 for 2 and >= 3.3 for 3 >- if test "$PyMAJVERSION" -lt "2"; then >- { { $as_echo "$as_me:$LINENO: error: This version of mod_python only works with Python major version 2 or higher. The one you have seems to be $PyVERSION." >&5 >-@@ -3395,8 +3391,7 @@ >- LDFLAGS="${LDFLAGS1} ${LDFLAGS2}" >- >- if test "$PyMAJVERSION" -eq "3"; then >-- PyLDVERSION=`$PYTHON_BIN -c 'from distutils import sysconfig; print(sysconfig.get_config_var("LDVERSION"))'` >-- LDLIBS1="-lpython${PyLDVERSION}" >-+ LDLIBS1="-lpython${PyMAJVERSION}" >- else >- LDLIBS1="-lpython${PyVERSION}" >- fi >-diff -nru ./configure.in ./configure.in >---- ./configure.in 2013-11-12 04:21:34.000000000 +0100 >-+++ ./configure.in 2014-04-15 17:27:39.000000000 +0200 >-@@ -171,9 +171,7 @@ >- PyMAJVERSION=`$PYTHON_BIN -c ['import sys; print(sys.version[:1])'`] >- PyMINVERSION=`$PYTHON_BIN -c ['import sys; print(sys.version.split(".")[1])'`] >- AC_MSG_RESULT($PyVERSION) >--if test -z "$PyMAJVERSION"; then >-- AC_MSG_ERROR([Unable to get Python version - is your Python working?]) >--fi >-+ >- # make sure Python version is >= 2.6 for 2 and >= 3.3 for 3 >- if test "$PyMAJVERSION" -lt "2"; then >- AC_MSG_ERROR([This version of mod_python only works with Python major version 2 or higher. The one you have seems to be $PyVERSION.]) >-@@ -218,8 +216,7 @@ >- LDFLAGS="${LDFLAGS1} ${LDFLAGS2}" >- >- if test "$PyMAJVERSION" -eq "3"; then >-- PyLDVERSION=`$PYTHON_BIN -c ['from distutils import sysconfig; print(sysconfig.get_config_var("LDVERSION"))'`] >-- LDLIBS1="-lpython${PyLDVERSION}" >-+ LDLIBS1="-lpython${PyMAJVERSION}" >- else >- LDLIBS1="-lpython${PyVERSION}" >- fi >-@@ -326,9 +323,9 @@ >- >- AC_MSG_CHECKING(flex version) >- FlexVERSION=`$LEX --version | sed 's/version//g' | awk '/flex/ {print $2}'` >-- Flex_MAJOR=`echo $FlexVERSION| awk -F . '{print $1}'` >-- Flex_MINOR=`echo $FlexVERSION| awk -F . '{print $2}'` >-- Flex_PATCH=`echo $FlexVERSION| awk -F . '{print $3}'` >-+ Flex_MAJOR=`echo $FlexVERSION| awk -F. '{print $1}'` >-+ Flex_MINOR=`echo $FlexVERSION| awk -F. '{print $2}'` >-+ Flex_PATCH=`echo $FlexVERSION| awk -F. '{print $3}'` >- >- if test "$Flex_MAJOR" -eq "2" && test "$Flex_MINOR" -eq "5" && test "$Flex_PATCH" -ge "31"; then >- AC_MSG_RESULT([$FlexVERSION. Good]) >-diff -nru ./dist/version.sh ./dist/version.sh >---- ./dist/version.sh 2013-11-12 04:21:34.000000000 +0100 >-+++ ./dist/version.sh 2014-04-15 17:27:39.000000000 +0200 >-@@ -5,6 +5,17 @@ >- MAJ=`awk '/MP_VERSION_MAJOR/ {print $3}' $MPV_PATH` >- MIN=`awk '/MP_VERSION_MINOR/ {print $3}' $MPV_PATH` >- PCH=`awk '/MP_VERSION_PATCH/ {print $3}' $MPV_PATH` >--GIT=`git describe --always` >- >--echo $MAJ.$MIN.$PCH-$GIT >-+# if git exists in path >-+if type git >/dev/null 2>&1; then >-+ # and we are in a checkout >-+ if git rev-parse 2>/dev/null; then >-+ # but not on a tag (which means this is a release) >-+ if test -z "`git log 'HEAD^!' --format=%d 2>/dev/null | grep 'tag: '`"; then >-+ # append git revision hash to version >-+ GIT="-`git describe --always`" >-+ fi >-+ fi >-+fi >-+ >-+echo $MAJ.$MIN.$PCH$GIT >-Only in ./: doc-html >-diff -nru ./lib/python/mod_python/Cookie.py ./lib/python/mod_python/Cookie.py >---- ./lib/python/mod_python/Cookie.py 2013-11-12 04:21:34.000000000 +0100 >-+++ ./lib/python/mod_python/Cookie.py 2014-04-15 17:27:39.000000000 +0200 >-@@ -59,7 +59,7 @@ >- >- _valid_attr = ( >- "version", "path", "domain", "secure", >-- "comment", "max_age", >-+ "comment", "expires", "max_age", >- # RFC 2965 >- "commentURL", "discard", "port", >- # Microsoft Extension >-diff -nru ./scripts/mod_python.in ./scripts/mod_python.in >---- ./scripts/mod_python.in 2013-11-12 04:21:34.000000000 +0100 >-+++ ./scripts/mod_python.in 2014-04-15 17:27:39.000000000 +0200 >-@@ -26,7 +26,7 @@ >- import sys >- import os >- import platform >--import io >-+import StringIO >- import mod_python >- from mod_python import httpdconf >- >-@@ -64,7 +64,7 @@ >- if len(args) != 1: >- parser.error("Must specify <src>") >- >-- exec(compile(open(args[0]).read(), args[0], 'exec')) >-+ execfile(args[0]) >- >- def cmd_create(): >- >-@@ -105,7 +105,7 @@ >- >- version = "\n" >- version += "mod_python: %s\n" % mod_python.mp_version >-- version += " %s\n\n" % repr(os.path.join(mod_python.version.LIBEXECDIR, "mod_python.so")) >-+ version += " %s\n\n" % repr(s.path.join(mod_python.version.LIBEXECDIR, "mod_python.so")) >- version += "python: %s\n" % ''.join(sys.version.splitlines()) >- version += " %s\n\n" % repr(mod_python.version.PYTHON_BIN) >- version += "httpd: %s\n" % mod_python.version.HTTPD_VERSION >-diff -nru ./src/Makefile.in ./src/Makefile.in >---- ./src/Makefile.in 2013-11-12 04:21:34.000000000 +0100 >-+++ ./src/Makefile.in 2014-04-15 17:27:39.000000000 +0200 >-@@ -50,7 +50,7 @@ >- >- dso: mod_python.so >- >--mod_python.so: $(SRCS) @SOLARIS_HACKS@ >-+mod_python.so: $(SRCS) @SOLARIS_HACKS@ >- @echo >- @echo 'Building mod_python.so.' >- @echo >-@@ -64,21 +64,17 @@ >- rm -f Makefile .depend >- >- version.c: >-- @MP_GIT_SHA=$$(git describe --always); \ >-- echo > version.c ; \ >-+ @echo > version.c ; \ >- echo "/* THIS FILE IS AUTO-GENERATED BY Makefile */" >> version.c ; \ >- echo "#include \"mp_version.h\"" >> version.c ; \ >-- echo "const char * const mp_git_sha = \"$${MP_GIT_SHA}\";" >> version.c ; \ >- echo "const int mp_version_major = MP_VERSION_MAJOR;" >> version.c ; \ >- echo "const int mp_version_minor = MP_VERSION_MINOR;" >> version.c ; \ >- echo "const int mp_version_patch = MP_VERSION_PATCH;" >> version.c ; \ >-- echo "const char * const mp_version_string = MP_VERSION_STRING(MP_VERSION_MAJOR,MP_VERSION_MINOR,MP_VERSION_PATCH) \"-$${MP_GIT_SHA}\";" >> version.c ; \ >-- echo "const char * const mp_version_component = \"mod_python/\" MP_VERSION_STRING(MP_VERSION_MAJOR,MP_VERSION_MINOR,MP_VERSION_PATCH) \"-$${MP_GIT_SHA}\";" >> version.c >-- >--# echo "const char * const mp_version_component = \"mod_python/\" #MP_VERSION_MAJOR \".\" #MP_VERSION_MINOR \".\" #MP_VERSION_PATCH \"-$${MP_GIT_SHA}\";" >> version.c >-+ echo "const char * const mp_version_string = \"`../dist/version.sh`\";" >> version.c ; \ >-+ echo "const char * const mp_version_component = \"mod_python/\" \"`../dist/version.sh`\";" >> version.c >- >- # this is a hack to help avoid a gcc/solaris problem >--# python uses assert() which needs _eprintf(). See >-+# python uses assert() which needs _eprintf(). See >- # SOLARIS_HACKS above >- _eprintf.o: >- ar -x `gcc -print-libgcc-file-name` _eprintf.o >-diff -nru ./src/include/mod_python.h ./src/include/mod_python.h >---- ./src/include/mod_python.h 2013-11-12 04:21:34.000000000 +0100 >-+++ ./src/include/mod_python.h 2014-04-15 17:27:39.000000000 +0200 >-@@ -156,7 +156,6 @@ >- #define MUTEX_DIR "/tmp" >- >- /* version stuff */ >--extern const char * const mp_git_sha; >- extern const int mp_version_major; >- extern const int mp_version_minor; >- extern const int mp_version_patch; >-@@ -267,7 +266,7 @@ >- if (PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 3 && \ >- PyUnicode_KIND(obj) == PyUnicode_1BYTE_KIND) { \ >- if (obj_is_borrowed) Py_INCREF(obj); /* so DECREF ok */ \ >-- str = (char *)PyUnicode_1BYTE_DATA(obj); \ >-+ str = PyUnicode_1BYTE_DATA(obj); \ >- } else { \ >- PyObject *latin = PyUnicode_AsLatin1String(obj); \ >- if (latin) { \ >-@@ -292,11 +291,11 @@ >- PyObject *result; >- PyObject *ucode = PyObject_Repr(o); >- /* we can do this because repr() should never have non-ascii characters XXX (really?) */ >-- char *c = (char *)PyUnicode_1BYTE_DATA(ucode); >-+ char *c = PyUnicode_1BYTE_DATA(ucode); >- if (c[0] == 'b') >-- result = PyBytes_FromStringAndSize((char *)PyUnicode_1BYTE_DATA(ucode)+1, PyUnicode_GET_LENGTH(ucode)-1); >-+ result = PyBytes_FromStringAndSize(PyUnicode_1BYTE_DATA(ucode)+1, PyUnicode_GET_LENGTH(ucode)-1); >- else >-- result = PyBytes_FromStringAndSize((char *)PyUnicode_1BYTE_DATA(ucode), PyUnicode_GET_LENGTH(ucode)); >-+ result = PyBytes_FromStringAndSize(PyUnicode_1BYTE_DATA(ucode), PyUnicode_GET_LENGTH(ucode)); >- Py_DECREF(ucode); >- return result; >- } >-diff -nru ./src/include/mod_python.h.in ./src/include/mod_python.h.in >---- ./src/include/mod_python.h.in 2013-11-12 04:21:34.000000000 +0100 >-+++ ./src/include/mod_python.h.in 2014-04-15 17:27:39.000000000 +0200 >-@@ -156,7 +156,6 @@ >- #define MUTEX_DIR "@MUTEX_DIR@" >- >- /* version stuff */ >--extern const char * const mp_git_sha; >- extern const int mp_version_major; >- extern const int mp_version_minor; >- extern const int mp_version_patch; >-@@ -267,7 +266,7 @@ >- if (PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 3 && \ >- PyUnicode_KIND(obj) == PyUnicode_1BYTE_KIND) { \ >- if (obj_is_borrowed) Py_INCREF(obj); /* so DECREF ok */ \ >-- str = (char *)PyUnicode_1BYTE_DATA(obj); \ >-+ str = PyUnicode_1BYTE_DATA(obj); \ >- } else { \ >- PyObject *latin = PyUnicode_AsLatin1String(obj); \ >- if (latin) { \ >-@@ -292,11 +291,11 @@ >- PyObject *result; >- PyObject *ucode = PyObject_Repr(o); >- /* we can do this because repr() should never have non-ascii characters XXX (really?) */ >-- char *c = (char *)PyUnicode_1BYTE_DATA(ucode); >-+ char *c = PyUnicode_1BYTE_DATA(ucode); >- if (c[0] == 'b') >-- result = PyBytes_FromStringAndSize((char *)PyUnicode_1BYTE_DATA(ucode)+1, PyUnicode_GET_LENGTH(ucode)-1); >-+ result = PyBytes_FromStringAndSize(PyUnicode_1BYTE_DATA(ucode)+1, PyUnicode_GET_LENGTH(ucode)-1); >- else >-- result = PyBytes_FromStringAndSize((char *)PyUnicode_1BYTE_DATA(ucode), PyUnicode_GET_LENGTH(ucode)); >-+ result = PyBytes_FromStringAndSize(PyUnicode_1BYTE_DATA(ucode), PyUnicode_GET_LENGTH(ucode)); >- Py_DECREF(ucode); >- return result; >- } >-diff -nru ./src/include/mp_version.h ./src/include/mp_version.h >---- ./src/include/mp_version.h 2013-11-12 04:21:34.000000000 +0100 >-+++ ./src/include/mp_version.h 2014-04-15 17:27:39.000000000 +0200 >-@@ -10,5 +10,3 @@ >- #define MP_VERSION_MINOR 5 >- #define MP_VERSION_PATCH 0 >- >--#define STR(x) #x >--#define MP_VERSION_STRING(maj, min, p) STR(maj) "." STR(min) "." STR(p) >-diff -nru ./src/mod_python.c ./src/mod_python.c >---- ./src/mod_python.c 2013-11-12 04:21:34.000000000 +0100 >-+++ ./src/mod_python.c 2014-04-15 17:27:39.000000000 +0200 >-@@ -748,10 +748,10 @@ >- py_compile_version, py_dynamic_version); >- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, >- "python_init: Python executable found '%s'.", >-- (char *)Py_GetProgramFullPath()); >-+ Py_GetProgramFullPath()); >- ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, >- "python_init: Python path being used '%s'.", >-- (char *)Py_GetPath()); >-+ Py_GetPath()); >- } >- >- /* Python version */ >-@@ -1795,7 +1795,7 @@ >- } >- >- /* are we in transparent mode? transparent mode is on after an error, >-- so a fitler can spit out an error without causing infinite loop */ >-+ so a filter can spit out an error without causing infinite loop */ >- if (ctx->transparent) { >- if (is_input) >- return ap_get_brigade(f->next, bb, mode, block, readbytes); >-diff -nru ./src/requestobject.c ./src/requestobject.c >---- ./src/requestobject.c 2013-11-12 04:21:34.000000000 +0100 >-+++ ./src/requestobject.c 2014-04-15 17:27:39.000000000 +0200 >-@@ -1967,6 +1967,10 @@ >- return 0; >- } >- else if (strcmp(name, "args") == 0) { >-+ if (val == Py_None) { >-+ self->request_rec->args = 0; >-+ return 0; >-+ } >- MP_ANYSTR_AS_STR(v, val, 1); >- if (!v) { >- Py_DECREF(val); /* MP_ANYSTR_AS_STR */ >+ /*
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 204793
:
165267
| 165638