Skip Menu |

This queue is for tickets about the POE CPAN distribution.

Report information
The Basics
Id: 11053
Status: resolved
Priority: 0/
Queue: POE

People
Owner: Nobody in particular
Requestors: steve [...] fisharerojo.org
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in:
  • 0.3005
  • 0.3007
  • 0.3009
Fixed in:
  • 0.3007
  • 0.3009



Subject: POE "make test" hangs on tests/10_units/04_drivers/01_sysrw.t
Below is the output generated from this test. It hangs everytime after test 11 for several recent versions of POE (at least since 0.3005). $ perl -Iblib/lib tests/10_units/04_drivers/01_sysrw.t 1..17 ok 1 - use POE::Driver::SysRW; ok 2 - disallow zero or negative block sizes ok 3 - disallow zero or negative block sizes ok 4 - disallow unknown parameters ok 5 - get() returns undef on error ok 6 - get() sets $! on error (Bad file descriptor) ok 7 - buffered 0 octets on empty put() ok 8 - no messages buffered ok 9 - first put: buffer contains 40 octets (should be 40) ok 10 - one message buffered ok 11 - second put: buffer contains 85 octets (should be 85) Right after test 11, the script attempts to perform some nonblocking IO. In the call to write_until_pipe_is_full, it hangs in the following loop on the call to $driver->flush() (line 175). 165 sub write_until_pipe_is_full { 166 my ($driver, $handle) = @_; 167 168 my $big_chunk = "*" x (1024 * 1024); 169 170 my $flushed = 0; 171 my $full = 0; 172 173 while (1) { 174 my $buffered = $driver->put([ $big_chunk ]); 175 my $after_flush = $driver->flush($handle); 176 $flushed += $buffered - $after_flush; 177 last if $full; 178 $full = $buffered == $after_flush; 179 }
I forgot to mention that this error occurs on Cygwin.
Thanks for the detailed problem report. I was able to work around the issue by forcing the one-way pipe to be an internet domain socket, and by calling shutdown() on it instead of close(). A fixed version of the test will appear in the next CPAN release.