Well I believe I have found and fixed the screen saver issue that has been plaguing the BOINC community since shortly after the 6.2 launch.
This bug wasn’t easy to track down, and was something of a perfect storm as far as the code was concerned.
The prerequisites for this bug were:
- Single monitor
- Graphics application window gets created behind the screen saver curtain window
- Graphics application gets stuck in an infinite loop or deadlocks on startup
We had some backup code in the screen saver to check for keyboard and mouse activity separately from the project application but after the graphics application deadlocks that code was no longer being executed.
The reason that code was no longer being executed stems from the fact that the BroadcastSystemMessage() Windows API waits for a success/failure return value from the application to which it was sending, since the graphics application itself was deadlocked it caused the screen saver to lock up.
I didn’t realize that the BroadcastSystemMessage() API would not timeout on a hung application. So I learned something new this weekend.
If all goes according to plan I’ll be releasing a new 6.4 client as well as a 6.6 client with the screen saver fixes today.