Chromatic <[EMAIL PROTECTED]> wrote:
> On Sat, 2004-01-17 at 04:29, Leopold Toetsch wrote:

>> I've converted this exit() to Parrot_exit() now. If that helps, I'll
>> change a bunch of other such code too.

> Yep, that fixed.  Now there are hangs in some of the t/src files.  Right
> now, it's t/src/sprintf.t at test 2.  The backtrace looks familiar:

Fine. I just changed 2 occurences of exit. There are some more, that
should fix more stuff.
But I'm a bit worried about the reason, why it actually hangs here:

> (gdb) bac
> #0  0x0ff976a4 in __pthread_sigsuspend () from /lib/libpthread.so.0
...
> #3  0x0fd0a694 in exit () from /lib/libc.so.6
> #4  0x0fcf23a8 in __libc_start_main () from /lib/libc.so.6

These are exit calls from the main thread. That should AFAIK just kill
all threads that got started eventually and finish the process.

There seem to be a lot of exit() calls in the icu lib. Changing these
isn't really a solution.

> Perhaps a Parrot_cleanup() would help extenders and embedders?

That is: Parrot_exit(exit_status) - we have that already.

My first attempts to cleanup all interpreter resources use an on_exit(3)
or atexit(3) handler, but both werent't protable, so the code was change
to do an explicit destroy processing via Parrot_exit().

> -- c

Thanks for digging into this,
leo

Reply via email to