Overview of changes from GLib 2.29/2.30 to 2.31.0 ================================================= This release contains a huge number of changes (500 commits worth). The list below attempts to summarise, but not every change is listed. * Major changes to threading and synchronisation - threading is now always enabled in GLib - support for custom thread implementations (including our own internal support for errorcheck mutexes) has been removed - a whole lot of dead code (to deal with the non-threaded case) has been ripped out. This includes the racy path of GMainContext that caused deadlocks with respect to child process exits in single-threaded programs (such as gtester). - libgthread is now an empty shell and g_thread_init() is no longer required (and has been deprecated) - GMutex and GCond can now be statically allocated without explicit initialisation. Dynamic allocation for these types is deprecated. - new types GRecMutex and GRWLock can also be statically allocated without explicit initialisation. - GPrivate can now be statically allocated and has an improved API. Dynamic allocation of GPrivate is deprecated. - GStaticMutex, GStaticRecMutex, GStaticRwLock, GStaticPrivate are deprecated. - GCond now uses monotonic time internally and a new API takes monotonic time for timed waits, deprecating the wallclock API - removal of the insane macro indirection used in the previous implementation of threading and synchronisation APIs - use SRWLock and CONDITION_VARIABLE APIs when available on Windows (Vista and later) and emulate them on XP - leaks of G(Static)Private-allocated data on some cases of thread exit have been fixed - simplified new thread creation API with the old API deprecated. The concept of joinability has disappeared (all threads are joinable) as have priority levels, 'bound'ness (ie: kernel vs. userspace threads) and ability to manipulate the stack size. - GThread is now a refcounted type - other implementation details changed * Move headers for some deprecated functionality to a separate deprecated/ directory. * New support for attribute-based deprecations to issue compiler warnings instead of breaking the build and/or giving warnings about implicit declarations (and possibly miscompiling). * GCache has been deprecated (after its last use was removed from our platform over a year ago). * It is no longer possible to include individual headers (like "ghash.h") -- you must #include . * The misguided experiment of allowing the program to stumble along with missing GSettings schemas is now over -- the abort is back. * Clarify that fork() is not valid while using GMainContext. This is because the internal resources of the GMainContext end up being shared by both processes. We had an assert here but it was breaking existing (valid) use cases as well, so it has been removed for now. * GApplication - add ::shutdown signal as logical dual to ::startup - don't use a GMainLoop: iterate the GMainContext directly (improves quit logic) * Several portability fixes for Windows, OpenBSD, Solaris * Add new GValue API to specifically deal in signed chars (in case the platform defines 'char' as unsigned) * some new API to mitigate the problems associated with calling setenv() in a multi-threaded program * Use CLOCK_MONOTONIC unconditionally if the libc has support at compile time (ie: stop checking for kernel support at runtime). * pkg-config files: - drop -uninstalled variants - remove gobject dependency on gthread * New macro G_ATOMIC_LOCK_FREE is defined if the atomic operations are implemented without use of a mutex. Cleaned up atomic-related compilation issues with mingw compilers on win32 systems. * SOCKS proxy and resolver improvements * Fix the spelling of G_IO_FLAG_IS_WRITABLE (was WRITEABLE) and introduce a macro for backwards compatibility. * GDBus: - many code generation updates and improvements - some race condition fixes, including testcase hangs * GVariant: - new g_variant_new_from_fixed_array() API - substantial docs improvements/clarifications * GKeyFile is now refcounted and boxed * mount monitoring is now based on /proc/mounts (where available) instead of mtab * new macros G_SOURCE_CONTINUE and G_SOURCE_REMOVE for returning from GSourceFunc (so you don't have to remember what TRUE and FALSE mean) * use xlocale functions where available to avoid too much heavy lifting in functions like g_ascii_strtod() * GMappedFile can now be created from an fd * error message strings grammar/i18n fixes * many docs updates * Partial list of bugs closed: 70598 Unify GStaticMutex and GMutex. 320888 optimization for g_main_context_wakeup 398418 GChildWatch race condition? 527214 g_timer_elapsed() returns random values 580505 add a way to set/get name for a thread 583511 race condition means g_main_loop_quit() does not work 590808 GKeyFile should have a refcount and a boxed type in GObject 592715 Document that g_str_hash() and g_int_hash() are not NULL safe 631413 Add macros for GSourceFunc return values 632049 not immediately clear what g_variant_get_fixed_array expects 640212 "Error stating file" is not a friendly message 640293 Use xlocale functions to implement g_ascii_strtod() 640975 Check that error exists before trying to set it 643934 GApplication lacking a logical dual for the ::startup signal 651268 assertion failed in GDBus worker thread 653987 g_key_file_get_integer cannot interpret trailing spaces 654412 Documentation for g_variant_get_child_value unclear 654563 info capplet: Failed to calculate disk space 655366 missing GSettings schemas lead to obscure crashes 656621 g_spawn_*() calls executables in current directory 656679 [gi] Add two annotations to gio 657992 Add glib__private__() API to share between glib,gio 658188 _set_as_last_used_for_type generates a broken mimeapps.list 658206 gsocks5proxy.c has invalid gettext use 658207 glib-compile-schemas says "can not" 658558 simpleaction: Fix documentation of :enabled 658683 clean up charset/language threading issues 658692 add introspection annotations to g_time_val_from_iso8601() 658715 Duplicite strings 658769 Invalid reuse of GError in GThreadedResolver 658806 sign error in string hash implementation 658976 gdbus-codegen's C namespace option needs to support Ugly_Case 659070 gdbus-codegen generated code segfaults when property changes 659082 gdbus-codegen: Single letter namespaces get dropped from names 659212 GMappedFile should fail on non-regular files 659324 _SPLICE_CLOSE_TARGET doesn't mark the output stream as closed 659423 Use adaptive mutexes when available 659427 Move deprecated code to a separate directory 659646 gdbus-codegen produce code that warnings at build 659690 Possible build warning in code generated by gdbus-codegen 659699 property name collision when generating code for "Connection" 659754 Add API to GMappedFile that allows to pass FD 659838 incorrect types in introspection for g_object_bind_property 659866 pthread_rwlock_t requires defined __USE_UNIX98 659870 gvalue: Fix signedness of g_value_get_char() 659889 glib-2.29.92/gio-2.0.pc.in has a wrong line. 659916 GObject size of 64K is not actively enforced 659920 Missing setter for read/write property 'closed' of GIOStream 659923 Add g_variant_new_fixed_array() function 660013 Remove old g_atomic configure cruft 660096 glib/rwlock tests failure (tests asserted) 660130 Possible loss of user data when updating mimeapps.list