Graham Dumpleton
graham.dumpleton at gmail.com
Tue Aug 5 20:36:44 EDT 2008
Just realised what the problem is, rather obvious really. You are supplying a mod_python request object 'req' to: logging.getLogger('').addHandler(logging.StreamHandler(req)) You can't do that, as the logging handler you are creating will persist beyond the lifetime of the internals of the 'req' object. Thus, when logging tries to access it later, it will crash Apache. In other words, 'req' is just a wrapper for some internal Apache data structures which will go away. The mod_python code doesn't currently try and protect itself from user code making the mistake of retaining the 'req' object longer than it should and then accessing those internals. Graham 2008/8/6 Jason Carver <ynj0qeh02 at sneakemail.com>: > If I try to install mod_python without python 2.5 installed, mod_python > refuses, so I assume you mean uninstall all versions of python, then install > python 2.5.2, then mod_python-3.3.1.win32-py2.5-Apache2.2.exe > > I did that, with no changes. I get the same Traceback during mod_python > install and I can still reproduce the crash reliably. > > Bug requirements update: It does not matter if I test the req object, it > only matters if the req object has something set. So these are the new > requirements to reproduce the bug > > use built in logging module > raise Exception > call page with variables (ie~ http://localhost/index.py?action=boom) > use the following code: > > import logging > > def index(req): > """Handles all Browser Requests""" > try: > logging.getLogger('').addHandler( logging.StreamHandler(req) ) > > raise Exception('Goodbye Apache') > > except Exception, e: > logging.exception('I crash') > raise > > So there seems to be some kind of three way interaction between the logging > module, the apache req module, and exception handling. If any one of the > three are not involved, apache does not crash... > > For now I can use a home-grown logger to get around the bug, but I hate to > build code that already exists and make future developers have to learn my > logger instead of the built-in one. > > Cheers, > Jason > > On Mon, Aug 4, 2008 at 9:44 PM, Graham Dumpleton > graham.dumpleton-at-gmail.com |public mailing list| > <a9ghk53mp50t at sneakemail.com> wrote: >> >> Please use reply-all and keep discussion on the list, don't reply just to >> me. >> >> Have you tried uninstalling all versions of Python and mod_python >> first and then install it? Ie., don't install when you have existing >> versions on the system. >> >> When installing packages, are you doing it as a user with >> administrator privileges? >> >> Graham >> >> 2008/8/5 <ynj0qeh02 at sneakemail.com>: >> > Unfortunately, when I tried to install the mod_python 3.3.1 for 2.5 I >> > got >> > this traceback: >> > Traceback (most recent call last): >> > File "boot_com_servers.py", line 21, in <module> >> > File "C:\Python25\Lib\site-packages\pythoncom.py", line 3, in <module> >> > pywintypes.__import_pywin32_system_module__("pythoncom", globals()) >> > File "C:\Python25\Lib\site-packages\win32\Lib\pywintypes.py", line 98, >> > in >> > __import_pywin32_system_module__ >> > ('.dll', 'rb', imp.C_EXTENSION)) >> > ImportError: DLL load failed: The specified procedure could not be >> > found. >> > >> > and when I try to start apache 2 anyway, it says "The requested >> > operation >> > has failed!" >> > >> > That's why I was using the version for 2.4. >> > >> > On Mon, Aug 4, 2008 at 9:21 PM, Graham Dumpleton >> > graham.dumpleton-at-......... |public mailing list| <...> wrote: >> >> >> >> 2008/8/5 <ynj0qeh02 at sneakemail.com>: >> >> > Thanks for the quick reply! Answers inline... >> >> > >> >> > On Mon, Aug 4, 2008 at 7:28 PM, Graham Dumpleton >> >> > graham.dumpleton-at-......... |public mailing list| <...> wrote: >> >> >> >> >> >> What operating system? What version of Python? What version of >> >> >> mod_python? >> >> > >> >> > I am on Windows XP SP3 using Python 2.5 in mod_python 3.3.1 >> >> > >> >> > I hacked the binary to use 2.5 on Windows, but the same problem is >> >> > reproducible on Ubuntu 7.10 using the latest source from svn compiled >> >> > with >> >> > python 2.5. >> >> > >> >> >> What startup messages for mod_python are in the Apache error log? >> >> > >> >> > >> >> > [Mon Aug 04 20:03:21 2008] [notice] Server built: Nov 7 2007 >> >> > 11:48:48 >> >> > [Mon Aug 04 20:03:21 2008] [notice] Parent: Created child process >> >> > 27164 >> >> > [Mon Aug 04 20:03:22 2008] [error] python_init: Python version >> >> > mismatch, >> >> > expected '2.4.3', found '2.5'. >> >> >> >> This is why it is probably breaking. Install mod_python compiled >> >> against Python 2.5. The version you are using was compiled against >> >> older version of Python. >> >> >> >> Fix your installation and try again. >> >> >> >> Do you get similar warnings on your other platform as well? >> >> >> >> Graham >> >> >> >> > [Mon Aug 04 20:03:22 2008] [error] python_init: Python executable >> >> > found >> >> > 'C:\\xampp\\apache\\bin\\apache.exe'. >> >> > [Mon Aug 04 20:03:22 2008] [error] python_init: Python path being >> >> > used >> >> > 'C:\\Program >> >> > >> >> > >> >> > Files\\OpenLibraries\\python;C:\\WINDOWS\\system32\\python25.zip;C:\\Python25\\Lib;C:\\Python25\\DLLs;C:\\Python25\\Lib\\lib-tk;;C:\\xampp\\apache\\bin'. >> >> > [Mon Aug 04 20:03:22 2008] [notice] mod_python: Creating 8 session >> >> > mutexes >> >> > based on 0 max processes and 250 max threads. >> >> > >> >> >> >> >> >> >> >> >> What is the mod_python configuration you have in Apache >> >> >> configuration >> >> >> files? >> >> > >> >> > >> >> > PythonOption mod_python.mutex_directory "/pytmp" >> >> > PythonOption mod_python.mutex_locks 8 >> >> > >> >> > AliasMatch ^/slique(.*) 'C:/Documents and >> >> > Settings/Jason/My >> >> > Documents/Coding/eclipse-workspace/slique-dev/src/$1' >> >> > >> >> > <Directory 'C:/Documents and Settings/Jason/My >> >> > Documents/Coding/eclipse-workspace/slique-dev/src'> >> >> > Options Indexes ExecCGI FollowSymLinks MultiViews >> >> > AllowOverride All >> >> > >> >> > AddHandler mod_python .py >> >> > PythonHandler mod_python.publisher >> >> > PythonDebug On >> >> > PythonPath "sys.path + ['C:/Documents and Settings/Jason/My >> >> > Documents/Coding/eclipse-workspace/slique-dev/src']" >> >> > >> >> > </Directory> >> >> > >> >> >> >> >> >> >> >> >> Specifically, are you setting PythonPath directive in really strange >> >> >> ways? >> >> > >> >> > PythonPath is set this way >> >> > PythonPath "sys.path + ['C:/Documents and Settings/Jason/My >> >> > Documents/Coding/eclipse-workspace/slique-dev/src']" >> >> > >> >> >> >> >> >> >> >> >> Does it happen if you don't use the 'logging' module? >> >> > >> >> > If I comment out logging.exception('I crash'), then the traceback >> >> > prints >> >> > to >> >> > screen as expected. >> >> > >> >> >> >> >> >> Graham >> >> >> >> >> >> 2008/8/5 Jason Carver <ynj0qeh02 at sneakemail.com>: >> >> >> > Here is code that consistently crashes Apache for me: >> >> >> > >> >> >> > import logging >> >> >> > >> >> >> > def index(req): >> >> >> > """Handles all Browser Requests""" >> >> >> > try: >> >> >> > reqHandler = logging.StreamHandler(req) >> >> >> > logging.getLogger('').addHandler(reqHandler) >> >> >> > if req.form.has_key('action'): >> >> >> > raise Exception('Goodbye Apache') >> >> >> > except Exception, e: >> >> >> > logging.exception('I crash') >> >> >> > raise >> >> >> > >> >> >> > Now just go to the site with /?action=dosomething and it will >> >> >> > crash >> >> >> > >> >> >> > Removing the if statement, the exception, or the logger are all >> >> >> > ways >> >> >> > of >> >> >> > alleviating the crash, but none of them should be necessary. >> >> >> > >> >> >> > Cheers, >> >> >> > Jason >> >> >> > >> >> >> > On Mon, Aug 4, 2008 at 2:51 PM, Jason Carver >> >> >> > <ynj0qeh02 at sneakemail.com> >> >> >> > wrote: >> >> >> >> >> >> >> >> Hi all, >> >> >> >> >> >> >> >> I am having the craziest error, confirmed on both a LAMPython and >> >> >> >> WAMPython setup: exceptions in mod_python are causing Apache to >> >> >> >> crash >> >> >> >> hard. >> >> >> >> Even stranger is that the exceptions have to meet a few specific >> >> >> >> conditions >> >> >> >> to cause Apache to crash. >> >> >> >> >> >> >> >> As best I can tell those conditions include: >> >> >> >> >> >> >> >> raising an exception (this problem always goes away if the >> >> >> >> exception >> >> >> >> is >> >> >> >> commented out) >> >> >> >> having the exception be inside an if-block that tests a >> >> >> >> dictionary >> >> >> >> (the >> >> >> >> problem goes away if I do something like """if 'hello' == >> >> >> >> 'hello': >> >> >> >> raise >> >> >> >> Exception('goodbye')""") >> >> >> >> catching the exception and logging it using the python built-in >> >> >> >> logging.exception(e) (the problem goes away if I comment out the >> >> >> >> logger) >> >> >> >> >> >> >> >> Apache does not write anything to its error.log, so it was a bit >> >> >> >> of >> >> >> >> an >> >> >> >> adventure to discover all these elements. >> >> >> >> >> >> >> >> Any ideas? >> >> >> >> >> >> >> >> Cheers, >> >> >> >> Jason >> >> >> > >> >> >> > _______________________________________________ >> >> >> > Mod_python mailing list >> >> >> > Mod_python at modpython.org >> >> >> > http://mailman.modpython.org/mailman/listinfo/mod_python >> >> >> > >> >> >> > >> >> > >> >> > >> > >> > > > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python > >
|