Closed zgiles closed 8 years ago
Curious if this is going to get merged in..
We don't need this until we process adding other triggers for photos in #21
As such I'm still actively evaluating this. Does it help with our existing bug #24 for some reason I can't fathom? Is this the best way to do blocking?
I think switching to nscontrol queues finally licked this. https://github.com/memoryio/memoryio-macosx/commit/1979edcdebce907b9cd1c7ca72d187ec22ea2bd0
Adding a blocking function to prevent multiple callbacks at the same time (or close together) from causing either a) a function to throw an exception because an object is busy doing something already, b) getting into code where it looked like something was available but isn't now, or c) multiple pictures within a few seconds.
This blocking is simple and works by creating a synchronization group which controls a BOOL so that only one call can edit the BOOL at the same time. It also sets a timer in another thread to reset the BOOL after some time (10seconds for now) so that we have up to 10s of unlimited bad calls against the function before another one wins.
The logs state when a thread tried and won or lost.
An earlier commit to make the 2.0f delay standard across the board helped here. Everything including the menubar call go through to ensure nothing fights with each other.