Jason Carver
ynj0qeh02 at sneakemail.com
Wed Aug 6 13:48:52 EDT 2008
Great, thanks for your help! Is there a good place for me to file a feature request to have mod_python do something besides crash in this case? For reference, I have code here to demonstrate the bug and workaround: def testCrash(req): """ Reliably crash server (on 2nd page access) Open as: http://server/index.py/testCrash """ handler = logging.StreamHandler(req) logging.getLogger('').addHandler( handler ) logging.exception('I crash') #removing this line will cause an apache crash on the # second web page access logging.getLogger('').removeHandler(handler) I have confirmed that the workaround works reliably for me. Cheers, Jason On Tue, Aug 5, 2008 at 8:36 PM, Graham Dumpleton graham.dumpleton-at-gmail.com |public mailing list| < a9ghk53mp50t at sneakemail.com> wrote: > 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 > > > > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20080806/3bd46233/attachment-0001.html
|