Issue Details (XML | Word | Printable)

Key: MODPYTHON-188
Type: Bug Bug
Status: Closed Closed
Resolution: Invalid
Priority: Trivial Trivial
Assignee: Unassigned
Reporter: Uka Mata
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
mod_python

Session object crash apache

Created: 05/Sep/06 10:43 AM   Updated: 05/Sep/06 11:09 AM
Component/s: session
Affects Version/s: 3.1.4
Fix Version/s: None

Time Tracking:
Not Specified

Environment:
Gentoo 2006.1 with Apache 2.0.58
Apache details:
# emerge -vp apache
[ebuild R ] net-www/apache-2.0.58-r2 USE="apache2 ssl threads -debug -doc -ldap -mpm-itk -mpm-leader -mpm-peruser -mpm-prefork -mpm-threadpool -mpm-worker -no-suexec -static-modules" 0 kB

Resolution Date: 05/Sep/06 11:09 AM


 Description  « Hide
Starting two times Session crash apache, example:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

import sys
from mod_python import apache, util, Session

def index(req):
        req.content_type = "text/plain; charset=iso-8859-1"
        req.send_http_header()
        req.write("Hello world!\n")
        sess1=Session.Session(req)
        sess2=Session.Session(req)
        return "Bye bye!"


When I have reloaded this page several times, apache has stopped to send pages, and I cannot stop it using the init scripts and therefore I need to use "kill -9"

The log said:
[Tue Sep 05 11:42:45 2006] [warn] child process 27269 still did not exit, sending a SIGTERM
[Tue Sep 05 11:42:47 2006] [warn] child process 27269 still did not exit, sending a SIGTERM
[Tue Sep 05 11:42:49 2006] [warn] child process 27269 still did not exit, sending a SIGTERM
[Tue Sep 05 11:42:51 2006] [error] child process 27269 still did not exit, sending a SIGKILL



Sometimes I have received this page:
Hello world!

<pre>
Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch
    result = object(req)

  File "/usr/lib/python2.4/site-packages/mod_python/publisher.py", line 136, in handler
    result = util.apply_fs_data(object, req.form, req=req)

  File "/usr/lib/python2.4/site-packages/mod_python/util.py", line 361, in apply_fs_data
    return object(**args)

  File "/var/www/localhost/htdocs/index.py", line 11, in index
    sess1=Session.Session(req)

  File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line 389, in Session
    timeout=timeout, lock=lock)

  File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line 294, in __init__
    timeout=timeout, lock=lock)

  File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line 131, in __init__
    self.lock() # lock new sid

  File "/usr/lib/python2.4/site-packages/mod_python/Session.py", line 215, in lock
    _apache._global_lock(self._req.server, self._sid)

ValueError: Failed to acquire global mutex lock

</pre>

## Stopping apache

solaris apache2 # /etc/init.d/apache2 stop
 * Stopping apache2 ... [ ok ]
solaris apache2 # ps -A
  PID TTY TIME CMD
[...]
27123 ? 00:00:00 apache2
27269 ? 00:00:00 apache2
27370 ? 00:00:00 apache2 <defunct>
27511 ? 00:00:00 apache2 <defunct>
27544 ? 00:00:00 apache2 <defunct>
27617 pts/1 00:00:00 ps
solaris apache2 #







 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Graham Dumpleton added a comment - 05/Sep/06 11:09 AM
This is not a bug, the code in your example is simply wrong. You cannot write:

        sess1=Session.Session(req)
        sess2=Session.Session(req)

This is because in creating sess1 the lock is acquired for the session ID. When sess2 is then created, it deadlocks on itself because the lock for the session ID is already held.

The log messages:

[Tue Sep 05 11:42:45 2006] [warn] child process 27269 still did not exit, sending a SIGTERM
[Tue Sep 05 11:42:47 2006] [warn] child process 27269 still did not exit, sending a SIGTERM
[Tue Sep 05 11:42:49 2006] [warn] child process 27269 still did not exit, sending a SIGTERM
[Tue Sep 05 11:42:51 2006] [error] child process 27269 still did not exit, sending a SIGKILL

are because the child process was deadlocked and thus could not be shutdown properly and it had to be killed.

Graham Dumpleton made changes - 05/Sep/06 11:09 AM
Field Original Value New Value
Resolution Invalid [ 6 ]
Status Open [ 1 ] Closed [ 6 ]