You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Bug 14: 4-arg select() was marking pipes as always ready, causing
POE event loop to busy-loop instead of blocking for timers
- Updated Key Findings: DESTROY is not feasible via JVM GC (unreliable
across JVM implementations, incompatible with Perl ref counting)
- Added Phase 3.3 to progress tracking
- Documented ses_session.t hang root cause (AnonEvent postback DESTROY)
Generated with [Devin](https://cli.devin.ai/docs)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
## Bugs Fixed (Commits 743c26461 through 2777d2e46)
31
+
## Bugs Fixed (Commits 743c26461 through f119640a5)
32
32
33
33
### Bug 1: `exists(&Errno::EINVAL)` fails in require context - FIXED
34
34
@@ -115,6 +115,18 @@ foreach my $session (@children) {
115
115
116
116
**Fix**: Used original `blessId` directly as cache key (fixed before DestroyManager was removed).
117
117
118
+
### Bug 14: 4-arg select() marks pipes as always ready - FIXED (commit f119640a5)
119
+
120
+
**Root cause**: The NIO-based `selectWithNIO()` in `IOOperator.java` treated all non-socket handles (pipes, files) as unconditionally ready (`nonSocketReady++`). This caused `select()` to return immediately when monitoring POE's signal pipe, preventing the event loop from blocking for timer timeouts.
121
+
122
+
**Impact**: POE's `ses_session.t` hung at test 7 (before `POE::Kernel->run()`) because the event loop never slept — `select()` always returned immediately with the pipe "ready", POE tried to read (got nothing), and looped back.
123
+
124
+
**Fix**: Replaced the "always ready" assumption with proper polling:
125
+
-`InternalPipeHandle.hasDataAvailable()` checks if data is actually in the pipe
126
+
- Write ends and regular files remain always-ready
127
+
- A poll loop with 10ms intervals respects the timeout parameter
128
+
- Both pollable fds and NIO selector are checked each iteration
129
+
118
130
## Current Test Results (2026-04-04)
119
131
120
132
### Unit Tests (t/10_units/)
@@ -295,15 +307,22 @@ foreach my $session (@children) {
295
307
- Fixed DestroyManager blessId collision with overloaded classes (Bug 13)
0 commit comments