Opened 18 years ago

Last modified 9 years ago

#8296 closed defect

mod_python package w/ latest apr is broken for Trac (patch included) — at Initial Version

Reported by: aturner@… Owned by: macports-tickets@…
Priority: Normal Milestone:
Component: ports Version: 1.2
Keywords: Cc:
Port: mod_python

Description

[Note, I emailed Markus Weissmann <mww@…> the maintainer of the mod_python package, but apparently he just moved and doesn't have internet access and so he asked me to open a ticket]

There's a real nasty bug in mod_python 3.2.8 when built against the latest versions of APR (1.2.x) which manifests itself thusly:

dyld: lazy symbol binding failed: Symbol not found: _apr_sockaddr_port_get

Referenced from: /opt/local/apache2/modules/mod_python.so Expected in: flat namespace

dyld: Symbol not found: _apr_sockaddr_port_get

Referenced from: /opt/local/apache2/modules/mod_python.so Expected in: flat namespace

[Tue Mar 28 15:26:19 2006] [notice] child pid 7304 exit signal Trace/ BPT trap (5)

The attached patch against mod_python resolves this issue. It would be great if the darwinports package included the patch.

-- BEGIN PATCH --

diff --speed-large-files --minimal -Nru mod_python-3.2.8.orig/src/connobject.c mod_python-3.2.8/src/connobject.c --- mod_python-3.2.8.orig/src/connobject.c 2006-03-08 01:57:06.753128000 -0500 +++ mod_python-3.2.8/src/connobject.c 2006-03-08 01:56:01.738907000 -0500 @@ -79,7 +79,7 @@

rc = ap_get_brigade(c->input_filters, bb, mode, APR_BLOCK_READ, bufsize); Py_END_ALLOW_THREADS;

  • if (! APR_STATUS_IS_SUCCESS(rc)) {

+ if (! rc) {

PyErr_SetObject(PyExc_IOError,

PyString_FromString("Connection read error"));

return NULL;

@@ -320,13 +320,7 @@

PyObject *addrobj = makeipaddr(addr); PyObject *ret = NULL; if (addrobj) {

  • apr_port_t port;
  • if(apr_sockaddr_port_get(&port, addr)==APR_SUCCESS) {
  • ret = Py_BuildValue("Oi", addrobj, port );
  • }
  • else {
  • PyErr_SetString(PyExc_SystemError,"apr_sockaddr_port_get failure");
  • }

+ ret = Py_BuildValue("Oi", addrobj, ntohs(addr->sa.sin.sin_port));

Py_DECREF(addrobj);

} return ret;

diff --speed-large-files --minimal -Nru mod_python-3.2.8.orig/src/filterobject.c mod_python-3.2.8/src/filterobject.c --- mod_python-3.2.8.orig/src/filterobject.c 2006-03-08 01:57:06.690443000 -0500 +++ mod_python-3.2.8/src/filterobject.c 2006-03-08 01:53:48.343873000 -0500 @@ -178,7 +178,7 @@

APR_BLOCK_READ, self->readbytes);

Py_END_ALLOW_THREADS;

  • if (!APR_STATUS_IS_EAGAIN(self->rc) && !APR_STATUS_IS_SUCCESS(self->rc)) {

+ if (!APR_STATUS_IS_EAGAIN(self->rc) && !self->rc) {

PyErr_SetObject(PyExc_IOError,

PyString_FromString("Input filter read error"));

return NULL;

diff --speed-large-files --minimal -Nru mod_python-3.2.8.orig/test/test.py mod_python-3.2.8/test/test.py --- mod_python-3.2.8.orig/test/test.py 2006-03-08 01:57:06.125553000 -0500 +++ mod_python-3.2.8/test/test.py 2006-03-08 01:56:55.209055000 -0500 @@ -290,9 +290,9 @@

PythonOption('PythonOptionTest sample_value'), DocumentRoot(DOCUMENT_ROOT), LoadModule("python_module %s" % quoteIfSpace(MOD_PYTHON_SO)),

  • IfModule("!mod_auth.c",
  • LoadModule("auth_module %s" %
  • quoteIfSpace(os.path.join(modpath, "mod_auth.so")))))

+ IfModule("!mod_auth_basic.c", + LoadModule("auth_basic_module %s" % + quoteIfSpace(os.path.join(modpath, "mod_auth_basic.so")))))

f = open(CONFIG, "w") f.write(str(s))

Change History (0)

Note: See TracTickets for help on using tickets.