in reply to Threading + Daemons troubles

But as the second iteration starts the daemon dies

That is the number one symptom( not 100% positive), that the first run's threads are still partially hanging around, and causing confusion, and your failure. Are you sure they joined? A thread must return from it's code block to be joinable. So you need something in your thread code block, to tell that thread to return. Just telling it to join, will NOT do it. The latest version of threads will not join if the thread has any piped opens left open, so you must kill any pids the thread launched. The latest threads version does has a way to summarily kill a thread, without it returning. What version of Perl you running?

In Perl, the thread gets an exact copy of the parent, at the time of spawning.... that includes any previous spawned threads. This makes it very tricky to dynamically spawn threads, as you do. You can try killing the thread (or forcing it to return), but that is no gaurantee that any objects you used got cleaned up, causing part of the thread to linger around.

The only reliable solution, is to reuse your threads. Don't try to dynamically spawn and join.....even if you get it to work, you will get a memory gain each spawn cycle. So reuse your threads, and preferrably create all of them before you demonize the main thread. See Reusable threads demo.


I'm not really a human, but I play one on earth Remember How Lucky You Are