http://www.perlmonks.org?node_id=1132987


in reply to Re^2: Hang on STDOUT
in thread Hang on STDOUT

it is possible that two different threads might try to write to STDERR

If you're not using locking on global handles that can be used from multiple threads, you should be.

Ie.

use threads::shared; ... my $sem :shared; ... { # some scope (as tight as possible) lock $sem; print ...; }

Or better:

use threads::shared; my $semSO :shared; sub tprint { lock $sem; print @_; } sub tprintf { lock $sem; printf @_; } my $semSE :shared; sub twarn{ lock $semSE; print STDERR @_; } sub twarnf{ lock $semSE; printf STDERR @_; } ... tprint( $some, "Stuff" ); ... else twarnf( "%u %s\n", $this, $that );

You might also consider using just one semaphore for both stdout and stderr if the are habitually directed to the same place.

Not saying this will fix your (exceptionally vaguely described) problem; but at least it will be one possibility removed from consideration.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
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.
I'm with torvalds on this Agile (and TDD) debunked I told'em LLVM was the way to go. But did they listen!