On Thu, Feb 20, 2003 at 05:11:55PM +0100, Wojtek Meler wrote: > On Thu, Feb 20, 2003 at 05:48:29PM +0200, Zeev Suraski wrote: > > At 17:38 20/02/2003, [EMAIL PROTECTED] wrote: > > >----- Original Message ----- > > > > I looked into the bug report, and it is true that > > > > BLOCK_INTERRUPTIONS > > > > should indeed block SIGPROF. I'll fix this in the weekend. > > > > > >I'm not sure if after unblocking interruptions PHP will get SIGPROF ... > > >it could cause looooong scripts. I'd rather use EG(timeout). I'm using > > >it now and it's working. > > > > EG(timeout) is a horrible option (I wrote both, SIGPROF is by far > > superior). I'll try to implement a solution that won't lose the SIGPROF. > > It's possible to call zend_bailout if EG(timeout) is set in > UNBLOCK_INTERRUPTIONS macro. But it doesn't solve main problem - it is > not safe to just skip the stack - even PHP use locks (TSRM) and its > memory allocator also use malloc/realloc/free which use locks, so it isn't safe. > > External libraries uses memory structures which can't be freed if > paritialy modified (because SIGPROF stops modification in the middle). > Trying to free them by PHP resource mechanism can cause SIGSEGV, busy loops etc. > Not freeing them we loose memory ... > > I strongly recommend to stop using zend_bailout on timeouts (it's better > to exit - it will not hang ;)
zeev, remember we discussed the very same thing last year (or the one before) at linuxtag in frankfurt? i also think that exit() would be the "clearest" thing. but it won't help in any threaded environment - so it's not an option. thing is - no matter how "clever" it is implemented - calling longjump from a signal handler is calling for trouble unless everybody involved beeing very careful about their "critical regions". especiqal non-threadsafe libs are very likely to not even have a concept what a critical section is... re, tc -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php