Okay, update.

I can't run web2py with a non-threaded Python, because it uses the
threading library.

On a single CPU system running OpenBSD 4.6 everything is fine.

On an SMP system running OpenBSD 4.6 web2py (fcgihandler and the built-
in webserver) crashes.

My knowledge of these kinda things stops here. I can't figure it out
that is this a Python or OpenBSD kernel level related problem?

On Jun 27, 9:29 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> thanks for letting us know. If you find a solution keep up posted.
>
> On Jun 27, 12:30 pm, ScOut3R <mailingl...@modernbiztonsag.org> wrote:
>
> > Dear mdipierro,
>
> > I think it's an error related to OpenBSD or OpenBSD's port of python.
> > I've tested the app on Debian and it handles the ajax() function well,
> > without any problem.
>
> > On Jun 25, 11:56 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > can you try 1.79.2?
>
> > > Massimo
>
> > > On Jun 25, 4:52 am, ScOut3R <mailingl...@modernbiztonsag.org> wrote:
>
> > > > Hello there again!
>
> > > > I've added some logging and with a double click submit I can see the
> > > > the response crashes before the return UL(*items).xml() part in the
> > > > first search function.
>
> > > > I hope this helps.
>
> > > > Best regards,
> > > > Mate
>
> > > > On Jun 24, 8:57 pm, ScOut3R <mailingl...@modernbiztonsag.org> wrote:
>
> > > > > I've added session.unlock to each of the functions and it seems stable
> > > > > except under one condition and that is if I'm accidentally double
> > > > > click the submit button.
>
> > > > > I'm using MySQL as the backend.
>
> > > > > The first function (bg_quick_dvd()) got executed and it returns the
> > > > > value but the following just times out. I'll try to figure out at
> > > > > which part.
>
> > > > > On Jun 24, 8:24 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > > This needs to be investigated. I think it may be a problem with
> > > > > > fcgi.py, not with web2py itself. Anywya, let's rule out problems 
> > > > > > with
> > > > > > session locking. Try add
>
> > > > > > session.unlock()
>
> > > > > > to those actions called via ajax that do not write session 
> > > > > > variables.
> > > > > > Do you still get the problem?
>
> > > > > > Do you use sqlite?
>
> > > > > > Can you add some print/logging statements to see which actions are
> > > > > > called, in which order and if they return?
>
> > > > > > On Jun 24, 12:14 pm, ScOut3R <mailingl...@modernbiztonsag.org> 
> > > > > > wrote:
>
> > > > > > > Dear List,
>
> > > > > > > the ajax based background search crashes my web2py installation. 
> > > > > > > It's
> > > > > > > version 1.77.3 and I'm using the fcgihandler to access the
> > > > > > > application. OS: OpenBSD 4.6, Python version is Python 2.5.4
> > > > > > > (r254:67916, Oct 19 2009, 01:52:14).
>
> > > > > > > As You can see below the search makes three database queries. The
> > > > > > > first search attempt works and the second crashes web2py. Would 
> > > > > > > You be
> > > > > > > so kind to look into it?
>
> > > > > > > The error is the following:
>
> > > > > > > Unhandled exception in thread started by <bound method 
> > > > > > > Connection.run
> > > > > > > of <gluon.contrib.gateways.fcgi.Connection object at 0x8b5af36c>>
> > > > > > > Traceback (most recent call last):
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 664, in run
> > > > > > >     self.process_input()
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 700, in process_input
> > > > > > >     self._do_params(rec)
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 799, in _do_params
> > > > > > >     self._start_request(req)
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 783, in _start_request
> > > > > > >     req.run()
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 592, in run
> > > > > > >     self._flush()
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 599, in _flush
> > > > > > >     self.stdout.close()
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 358, in close
> > > > > > >     self._conn.writeRecord(rec)
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 715, in writeRecord
> > > > > > >     rec.write(self._sock)
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 552, in write
> > > > > > >     self._sendall(sock, header)
> > > > > > >   File "/var/www/web2py/prod/gluon/contrib/gateways/fcgi.py", line
> > > > > > > 529, in _sendall
> > > > > > >     sent = sock.send(data)
> > > > > > > socket.error: (32, 'Broken pipe')
>
> > > > > > > The jquery snippet that calls the background functions:
>
> > > > > > > function dvd() { ajax('bg_quick_dvd', ['keyword', 'option'],
> > > > > > > 'target_dvd'); }
> > > > > > > function music_cd() { ajax('bg_quick_music_cd', ['keyword', 
> > > > > > > 'option'],
> > > > > > > 'target_music_cd'); }
> > > > > > > function book() { ajax('bg_quick_book', ['keyword', 'option'],
> > > > > > > 'target_book');
>
> > > > > > > function start() {
> > > > > > >         if(jQuery('#title').attr('checked'))
> > > > > > >                 jQuery('#option').val('1');
> > > > > > >         if(jQuery('#store').attr('checked'))
> > > > > > >                 jQuery('#option').val('0');
>
> > > > > > >         dvd();
> > > > > > >         setTimeout('music_cd()', 150);
> > > > > > >         setTimeout('book()', 300);
>
> > > > > > > }
>
> > > > > > > And the backround functions:
>
> > > > > > > def bg_quick_dvd():
> > > > > > >         if (request.vars.option == '1'):
> > > > > > >                 pattern = '%' + request.vars.keyword + '%'
> > > > > > >                 dvds = db((db.dvds.user==user_id) &
> > > > > > > (db.dvds.title.like(pattern))).select(orderby=db.dvds.title)
> > > > > > >         else:
> > > > > > >                 dvds = db((db.dvds.user==user_id) &
> > > > > > > (db.dvds.store==request.vars.keyword)).select(orderby=db.dvds.title)
> > > > > > >         items = [A(row.title, _href=URL(c='dvd', r=request, 
> > > > > > > f='show',
> > > > > > > args=row.id)) for row in dvds]
> > > > > > >         return UL(*items).xml()
>
> > > > > > > @auth.requires_login()
> > > > > > > def bg_quick_music_cd():
> > > > > > >         if (request.vars.option == '1'):
> > > > > > >                 pattern = '%' + request.vars.keyword + '%'
> > > > > > >                 music_cds = db((db.music_cds.user==user_id) &
> > > > > > > (db.music_cds.title.like(pattern))).select(orderby=db.music_cds.title)
> > > > > > >         else:
> > > > > > >                 music_cds = db((db.music_cds.user==user_id) &
> > > > > > > (db.music_cds.store==request.vars.keyword)).select(orderby=db.music_cds.tit
> > > > > > >  le)
> > > > > > >         items = [A(row.title, _href=URL(c='music_cd', r=request, 
> > > > > > > f='show',
> > > > > > > args=row.id)) for row in music_cds]
> > > > > > >         return UL(*items).xml()
>
> > > > > > > @auth.requires_login()
> > > > > > > def bg_quick_book():
> > > > > > >         if (request.vars.option == '1'):
> > > > > > >                 pattern = '%' + request.vars.keyword + '%'
> > > > > > >                 books = db((db.books.user==user_id) &
> > > > > > > (db.books.title.like(pattern))).select(orderby=db.books.title)
> > > > > > >         else:
> > > > > > >                 books = db((db.books.user==user_id) &
> > > > > > > (db.books.store==request.vars.keyword)).select(orderby=db.books.title)
> > > > > > >         items = [A(row.title, _href=URL(c='book', r=request, 
> > > > > > > f='show',
> > > > > > > args=row.id)) for row in books]
> > > > > > >         return UL(*items).xml()
>
> > > > > > > Best regards,
> > > > > > > Mate

Reply via email to