main: Do not release the lock if it hasn't been acquired
On various systems, trying to release a mutex that hasn't been acquired will result in a run-time error. In order to avoid this, we trylock() the Big Clutter Lock™ and immediately unlock() it, regardless of the result; if the lock was already acquired, trylock() will immediately fail, and we can release it; if the lock was not acquired, trylock() will succeed, and we can release the lock immediately. This is necessary to maintain binary compatibility and invariants for Clutter applications doing: clutter_init() clutter_threads_enter() ... clutter_main() ... clutter_threads_leave() instead of the correct: clutter_init() clutter_threads_enter() ... clutter_threads_leave() clutter_main() clutter_threads_enter() ... clutter_threads_leave() With Clutter ≥ 1.12, the idiomatic form is: clutter_init() ... clutter_main() given that the public Big Clutter Lock™ acquire/release API has been deprecated, and nobody should take the lock outside of Clutter itself. https://bugzilla.gnome.org/show_bug.cgi?id=679439
parent
bacda245
Please register or sign in to comment