The pollTimeout must be set to zero if less than zero.

This commit is contained in:
BDisp
2023-09-22 20:08:46 +01:00
parent 760aca61ab
commit 1262d236e5

View File

@@ -175,10 +175,18 @@ namespace Terminal.Gui {
if (mainLoop.timeouts.Count > 0) {
pollTimeout = (int)((mainLoop.timeouts.Keys [0] - now) / TimeSpan.TicksPerMillisecond);
if (pollTimeout < 0) {
// This avoids poll waiting infinitely if pollTimeout=-1 until some action is detected
if (pollTimeout == -1) {
pollTimeout = 0;
}
// This avoids 'poll' waiting infinitely if 'pollTimeout < 0' until some action is detected
// This can occur after IMainLoopDriver.Wakeup is executed where the pollTimeout is less than 0
// and no event occurred in elapsed time when the 'poll' is start running again.
/*
The 'poll' function in the C standard library uses a signed integer as the timeout argument, where:
- A positive value specifies a timeout in milliseconds.
- A value of 0 means the poll function will return immediately, checking for events and not waiting.
- A value of -1 means the poll function will wait indefinitely until an event occurs or an error occurs.
- A negative value other than -1 typically indicates an error.
*/
pollTimeout = 0;
return true;
}
} else