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 }