[omniORB] omniORBpy and apache/mod_python: ORB_init gets stuck

Bernard Niset bn@7ways.com
Wed, 24 May 2000 12:51:32 +0200


I don't know it is relative or the solution to your problem but it might
help other people wanting to use omniORBpy from a CGI: apache doesn't export
by default every environment variable (that feature is actually managed by
mod_cgi), that means that LD_LIBRARY_PATH or PYTHONPATH are not exported
unless you specify it in the apache configuration file by a PassEnv
directive.
Cheers,
-----------------------------------------
Bernard Niset
7Ways development team
http://www.tldnames.com
-----------------------------------------

-----Original Message-----
From: owner-omniorb-list@uk.research.att.com
[mailto:owner-omniorb-list@uk.research.att.com]On Behalf Of Juri Pakaste
Sent: mercredi 24 mai 2000 03:47
To: omniorb-list@uk.research.att.com
Subject: [omniORB] omniORBpy and apache/mod_python: ORB_init gets stuck

I'm trying to access a CORBA server from a Python script which is
being executed by mod_python. I'm running with mod_python 2.0, apache
1.3.12 and a version of omniORB 3.0 and omniORBpy which I checked out
from CVS just a hour or so ago.

Things work nicely when working from the command line; however, when
my script is being executed by mod_python, it gets stuck on the first
line that tries to access the ORB:

orb = CORBA.ORB_init([], CORBA.ORB_ID)

I'm passing it an empty list instead of sys.argv because it seems I
don't get a sys.argv with mod_python; the empty list doesn't seem to
bother omniORB. It looks like ORB_init never returns, or at least not
in any reasonable time. I can close the connection to the web server,
but the Apache process is apparently still stuck trying to access the
ORB.

If I run apachectl stop, the process doesn't go away. However, this is
printed to Apache's error log:

omniORB: Assertion failed -- mutex destroyed whilst held.
 This is a bug in omniORB. Please submit a report (with stack
 trace if possible) to <omniorb@uk.research.att.com>.

I'm pretty much completely unfamiliar with mod_python, so I don't know
what kind of weird things it does, but obviously something in it
causes breakage. Below is the ultra-simple test script I used. The
"got orb" line never gets printed to the log. It works just fine if I
comment out the from mod_python import apache line and run it as a
normal CGI.

Any help very much appreciated.



from mod_python import apache
import sys
from omniORB import CORBA
from Squeak import Stream
import CosNaming

server = None

def getServer():
    global server
    if server == None:
        sw = sys.stderr.write
        sw("in getServer, server was None, trying to get orb\n")
        orb = CORBA.ORB_init([], CORBA.ORB_ID)
        sw("got orb: " + str(orb) + "\n")
        ns = orb.resolve_initial_references("NameService")
        context = CosNaming.NameComponent("squeak", "")
        objectname = CosNaming.NameComponent("server", "Object")
        server = ns.resolve([context, objectname])
    return server

def handler(req):
    sys.stderr.write("foo\n")
    srv = getServer()
    req.send_http_header()
    req.write("Hello World!\n")
    req.write(str(srv))
    return apache.OK

if __name__ == '__main__':
    print "Content-type: text/plain\n"
    print getServer()

--
[ Juri Pakaste / juri@iki.fi / <URL:http://www.iki.fi/juri/> ]