
A select query could deadlock if.. - it was querying a character or socket device that, at the start of the select query, was not known to be ready for the requested operations; - this device could not be checked immediately, due to another ongoing query to the same character or socket driver; - the select query had a timer that triggered before the device could be checked, thereby changing the select query to non-blocking. In this situation, a missing flag check would cause the select code to conclude erroneously that the operations which it flagged for later, were satisfied. At the same time, the same flag remained set, so that the select query would continue to wait for that device. This resulted in a deadlock. The same bug could most likely be triggered through other scenarios that were even less likely to occur. This patch fixes the race condition and puts in a hopefully slightly more informative comment for the affected block of code. In practice, the bug could be triggered fairly reliably by generating lots of output in tmux. Change-Id: I1c909255dcf552e6c7cef08b0cf5cbc41294b99c
Description
Languages
C
78.2%
Roff
10.2%
Assembly
4.6%
Shell
3.7%
Makefile
1.6%
Other
1.2%