in reply to Re^2: Why do my threads sometimes die silenty?
in thread Why do my threads sometimes die silenty?

I'm pretty sure the OP meant the thread exited before the process terminated.

Note that the above is not silent if the die has a chance to execute. (About 50% of the time on this machine.)

Replies are listed 'Best First'.
Re^4: Why do my threads sometimes die silenty?
by BrowserUk (Patriarch) on Sep 21, 2011 at 21:18 UTC
    Note that the above is not silent if the die has a chance to execute.

    Yes, but it turns out that is exactly what he was doing. At least in his experiments:

    There are other ways. For example, there were a bunch of versions of perl (most of the 5.8.x series from memory) that (on Windows) silently exited if they ran "Out of memory!" never producing that error message. I had that happen a lot.

    Also, hard to demo since dave-the-m changed the regex engine from recursive to iterative, but previously running a pathological regex in a thread could run it out of C-stack and it would silently disappear. There aren't many things left in perl that consume stack any more, but I wouldn't mind betting that if we could find one, that the thread would still terminate silently.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Recursive calling of special subs (AUTOLOAD, DESTROY) can eat up the C stack.

        It looks like that might do the trick:

        perl -Mthreads -E"AUTOLOAD{ &{ $_[0] } }; async{ fred(); }->join; say +'done'"

        Though it might take a very long time.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.