Skip to content
  • Emmanuele Bassi's avatar
    threads: Do not release the GDK lock if it hasn't been acquired yet · 79c3ff3c
    Emmanuele Bassi authored and Matthias Clasen's avatar Matthias Clasen committed
    Since GLib ≥ 2.41, attempting to release an unlocked mutex will abort(),
    as it happens on most systems already.
    
    Given the lack of proper documentation on how to use GDK with threads,
    there is code in the wild that does:
    
        gdk_threads_init ();
        gdk_init ();
    
        ...
    
        gtk_main ();
    
    instead of the idiomatically correct:
    
        gdk_threads_init ();
        gdk_threads_enter ();
    
        gtk_init ();
    
        ...
    
        gtk_main ();
    
        ...
    
        gdk_threads_leave ();
    
    Which means that gtk_main() will try to release the GDK lock, and thus
    trigger an error from GLib.
    
    we cannot really fix all the wrong code everywhere, and since it does
    not cost us anything, we can work around the issue inside GDK itself, by
    trying to acquire the GDK lock inside gdk_threads_leave() with
    trylock().
    
    https://bugzilla.gnome.org/show_bug.cgi?id=735428
    79c3ff3c