[mod_python] psp.PSP(req,string='hello world') causessegfault]

Graham Dumpleton grahamd at dscpl.com.au
Tue Apr 26 21:36:42 EDT 2005


I have put all the code changes together under the bug report:

  http://issues.apache.org/jira/browse/MODPYTHON-48

Links have been included back to some of the mailing list
messages for context.

If this doesn't solve everything let us know.

Graham

Graham Dumpleton wrote ..
> The code in PSP constructor where code is first put in cache should be:
> 
>             cached = mem_scache.get(string)
>             if cached:
>                 self.code = cached
>             else:
>                 source = _psp.parsestring(string)
>                 code = compile(source, "__psp__", "exec")
>                 mem_scache.store(string,code)
>                 self.code = code                                      
> 
> Ie., code wasn't actually being compiled. Not sure what should be put
> for second argument. It only gets displayed in error messages according
> to documentation. Normally it would be the name of the module, but
> there isn't one here.
> 
> It seems to work for me now. I'll try and get all these changes together
> and post a bug report on JIRA.
> 
> Graham
> 
> Graham Dumpleton wrote ..
> > Following code in _psp_module_parsestring() looks suspect to me:
> > 
> >     yy_delete_buffer(bs, scanner);
> >     yylex_destroy(scanner);
> > 
> > There are already calls to yy_delete_buffer() in yylex_destroy(). If
> I
> > comment out the call to yy_delete_buffer() I no longer get the
> > double delete warning. I still get the Python error below though,
> > so that is the next thing to solve.
> > 
> > Graham
> > 
> > Graham Dumpleton wrote ..
> > > It may not be your platform, but a problem in the C code part of PSP
> > > modules after all. On Mac OSX, after making the Python changes you
> > > give, it doesn't crash, but do get this warning in the logs.
> > > 
> > > [Wed Apr 27 10:21:14 2005] [notice] Apache/2.0.51 (Unix) mod_python/3.1.3
> > > Python/2.3 configured -- resuming normal operations
> > > *** malloc[595]: Deallocation of a pointer not malloced: 0x528050;
> This
> > > could be a double free(), or free() called with the middle of an allocated
> > > block; Try setting environment variable MallocHelp to see tools to
> help
> > > debug
> > > *** malloc[595]: error for object 0x5102c0: Double free
> > > [Wed Apr 27 10:21:16 2005] [error] [client 127.0.0.1] PythonHandler
> _handler:
> > > Traceback (most recent call last):
> > > [Wed Apr 27 10:21:16 2005] [error] [client 127.0.0.1] PythonHandler
> _handler:
> > > File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/apache.py",
> > > line 308, in HandlerDispatch\n    result = object(req)
> > > [Wed Apr 27 10:21:16 2005] [error] [client 127.0.0.1] PythonHandler
> _handler:
> > > File "/Users/grahamd/Sites/psp_crash/_handler.py", line 6, in handler\n
> > > content_file.run()
> > > [Wed Apr 27 10:21:16 2005] [error] [client 127.0.0.1] PythonHandler
> _handler:
> > > File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/mod_python/psp.py",
> > > line 190, in run\n    if "session" in code.co_names:
> > > [Wed Apr 27 10:21:16 2005] [error] [client 127.0.0.1] PythonHandler
> _handler:
> > > AttributeError: 'str' object has no attribute 'co_names' 
> > > 
> > > I haven't looked at the Python traceback bit yet, but the fact that
> malloc
> > > is complaining suggests that some sort of memory manipulation is
> > > wrong.
> > > 
> > > Graham
> > > 
> > > 
> > > dharana wrote ..
> > > > There where more typos. I think I've fixed them. I am now trying
> to
> > > > reproduce it in another machine. I'm starting to believe it must
> a
> > > > problem with my server setup what is causing the segfaults.
> > > > 
> > > > -------- Original Message --------
> > > > Subject: Re: [mod_python] psp.PSP(req, string='hello world') causes
> > segfault
> > > > Date: Wed, 27 Apr 2005 00:49:08 +0200
> > > > From: dharana <dharana at dharana.net>
> > > > To: dharana <dharana at dharana.net>
> > > > CC: Graham Dumpleton <grahamd at dscpl.com.au>,  mod_python list 
> > > > <mod_python at modpython.org>,  python-dev at httpd.apache.org
> > > > References: <426EB09B.60804 at dharana.net> 
> > > > <cd668e4f1acb033939973727c751beb6 at dscpl.com.au> 
> > > > <426EB7C7.4030307 at dharana.net> 
> > > > <9f4387af79e092bc1b49d90c29633edc at dscpl.com.au> 
> > > > <426EC2D1.7080401 at dharana.net>
> > > > 
> > > > There where 3 typos in psp.py. I could only fix them by temporarily
> > > > commenting out the _psp.parsestring call. I leave to you the C side
> > :)
> > > > 
> > > > I've included the patch file with the typos fixed. Hope it helps.
> I'm
> > > > also forwarding to python-dev because I believe I've crossed the
> line
> > > again.
> > > > 
> > > > -----------------------------------------------------------------------
> > > > --- /usr/src/mod_python-3.1.4/lib/python/mod_python/psp.py      Sat
> > Jan
> > > > 29 22:25:29 2005
> > > > +++ /usr/local/hosting/lib/python2.4/site-packages/mod_python/psp.py
> > > > Wed Apr 27 00:43:06 2005
> > > > @@ -111,12 +111,12 @@
> > > >               self.load_from_file()
> > > >           else:
> > > > 
> > > > -            cached = strcache.get(string)
> > > > +            cached = mem_scache.get(string)
> > > >               if cached:
> > > >                   self.code = cached
> > > >               else:
> > > >                   self.code = _psp.parsestring(string)
> > > > -                strcache.store(string)
> > > > +                mem_scache.store(string, self.code)
> > > > 
> > > >       def cache_get(self, filename, mtime):
> > > > 
> > > > @@ -358,8 +358,8 @@
> > > > 
> > > >       def get(self, key):
> > > >           if self.cache.has_key(key):
> > > > -            hist, val = self.cache[key]
> > > > -            self.cache[key] = (hits+1, code)
> > > > +            hits, val = self.cache[key]
> > > > +            self.cache[key] = (hits+1, val)
> > > >               return val
> > > >           else:
> > > >               return None
> > > > -----------------------------------------------------------------------
> > > > 
> > > > -- 
> > > > dharana
> > > _______________________________________________
> > > 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


More information about the Mod_python mailing list