list at joreybump.com
Tue Oct 18 19:05:00 EDT 2005
Philippe C. Martin wrote: > Since I just managed to seg fault apache I feel I should explain what my goal > is with mod_python. > > I already have a fairly big library written in python which purpose is to > discuss with smart cards but also provide "software" enryption capabilites: > As such, this library uses modules that in turn talk to C code. > > The ultimate goal is to have users need to authenticate themselves to the > servers (on smart card on each side) in order to obtain access to certain > pages. > > I must also say that there is a failry large data set that needs to be loaded > in memory. Why? > The code below shows the line that creates the core dump: it instantiates that > _large_ object and does a lot in the process. > > As I am an application developper more than a web guy, there are perhaps some > obvious "NO NOs'" I should be aware of that are related to the apache > environment. > > Please note that, although I must have bugs, the code I'm calling _seems_ to > work flawlessly under Linux and Windows. It might, for a single interpreter. But apache might be forking multiple children on your system. Can your machine handle 5 or more copies of this object in memory? > from mod_python import apache > import os > import sys > if os.name == 'nt': > sys.path.append("Z:\\dev") > else: > sys.path.append('/home/philippe/dev') > > > from SC.pilot.SC_Script_Processor import * This may happen multiple times. It will be cached in a prefork environment, but once for each child. I have no idea how it works on Windows. > def world(req): > ls = SC_Script_Processor() #INSTANTIATE A _BIG_ OBJECT ==> *** THIS IS > THE KILLER THAT CRASHES APACHE *** How big? If it's a data set, why not use a database? > ll = ls.Reader_List() # get the reader list > > #Grab ATR from card - assume first reader > l_appli_conn = ls.Get_Connection(r1) > > req.send_http_header() > req.write("RETURN CARD ATR= " + l_appli_conn.Get_Connection_ATR() ) > return apache.OK We need to see your code in the imported module. It's a black box to us.