Hide
The reading half of the pipe used to wake up from polling is closed when the timer is finalized. However an attempt is then made to close it once more when the reactor itself is finalized. If you create a new reactor, as Blocking Connection does, the new reactor (or its timer) may reuse a file descriptor previously associated with the read half of the pipe from the old timer. Consequently, the second close attempt on the read pipe closes a file descriptor that is now associated with some other context. This results in the reconnect spinning endlessly.
This release includes an update that ensures the pipe is fully closed on finalizing the timer and the file descriptors are set to invalid to prevent an attempt to reclose them. Now, reconnecting with `BlockingConnection` works correctly and does not spin endlessly.
Show
The reading half of the pipe used to wake up from polling is closed when the timer is finalized. However an attempt is then made to close it once more when the reactor itself is finalized. If you create a new reactor, as Blocking Connection does, the new reactor (or its timer) may reuse a file descriptor previously associated with the read half of the pipe from the old timer. Consequently, the second close attempt on the read pipe closes a file descriptor that is now associated with some other context. This results in the reconnect spinning endlessly.
This release includes an update that ensures the pipe is fully closed on finalizing the timer and the file descriptors are set to invalid to prevent an attempt to reclose them. Now, reconnecting with `BlockingConnection` works correctly and does not spin endlessly.