libdex 1.2.alpha
================

This is an alpha release for the upcoming GNOME 51.

 * Dropped the gconstructor for `dex_init()` which means applications must
   call `dex_init()` at startup themselves from `main()`.
 * New DexLimiter API for bounded concurrency with explicit
   acquire/release, automatic permit management while running fibers, and
   close/reject behavior for queued work
 * New timeout wrappers for futures: dex_future_with_timeout(),
   dex_future_with_timeout_msec(), dex_future_with_timeout_seconds(), and
   dex_future_with_deadline()
 * Additional GFile async wrappers for temporary directories, copy with
   progress, trash, append, partial content loading, byte loading,
   filesystem info queries, default handler lookup, enclosing mount lookup,
   display-name changes, read/write open/create/replace variants, string
   content replacement, and symbolic link creation
 * Additional GIO async wrappers for GAppInfo, GDataInputStream,
   GOutputStream, GSocketClient, GSocketConnection, GTlsConnection,
   GDtlsConnection, GResolver, GNetworkMonitor, GProxy, GProxyResolver,
   GSubprocess, GTlsDatabase, GTlsInteraction, GPermission, and
   GUnixConnection
 * New DexCoroutine stackless future type with helpers for suspending on
   pending futures, plus dex_scheduler_spawn_coroutine()
 * New DexTaskGroup API for structured concurrency with close, cancel, and
   cancel-on-error behavior
 * New DexThreadPool API for bounded threaded work queues
 * New dex_limiter_run_on_pool(), dex_limiter_run_coroutine(), and
   dex_limiter_close_after_drain()
 * New dex_aio_open() and dex_aio_close()
 * New dex_fiber_yield()
 * New DEX_DEFINE_CLOSURE_TYPE() helper for closure-like state structs
 * New dex_set_object() helper and DexObject property support for DexFuture
   values
 * New dex_promise_resolve_enum()
 * New DexStateMachine API to simplify asynchronous state machines with fibers
   providing a simple API to track state machine transitions.
 * Future debug names are now enabled by default when compiling with GCC and
   fibers emit Sysprof marks for their duration
 * Fix DexObject weak-reference retargeting to avoid a possible lock
   inversion during finalization
 * Fix DexChannel receive_all() to unblock queued senders after draining
   bounded channel capacity
 * Fix DexDelayed chaining so release waits for the wrapped future in the
   correct direction
 * DexPosixAioBackend now delays threadpool startup until the first work item
   is enqueued.
 * Make DexSemaphore user-space only
 * Build system fixes for gio-unix dependency propagation
 * Fix clang testsuite compatibility around atomic addition
 * Documentation additions for limiters, timeout-gated futures, coroutines,
   task groups, thread pools, schedulers, debugging, and GIO wrappers
 * Testsuite additions for limiters, timeout passthrough behavior, delayed
   futures, channel receive_all(), weak-reference retargeting, GIO wrappers,
   AIO, coroutines, fibers, task groups, thread pools, DexObject, and
   DexTest helpers


libdex 1.1.0
============

This is a stable release for GNOME 50.

 * No changes since 1.1.rc

libdex 1.1.rc
=============

This is a release candidate for 1.1

 * Require GLib 2.87.0

libdex 1.1.alpha
================

This is an alpha release for the upcoming GNOME 50

 * New D-Bus support with DexDBusInterfaceSkeleton for dispatching
   method invocations in fibers, allowing async/await in D-Bus handlers
 * New dex_bus_own_name_on_connection() for managing bus name ownership
 * New DexFutureListModel for integrating futures with GListModel
 * Python asyncio integration allowing Dex.Future to be used with
   async/await in Python code
 * New runtime version query API: dex_get_major_version(),
   dex_get_minor_version(), and dex_get_micro_version()
 * New GIO wrappers: dex_file_create(), dex_data_input_stream_read_line(),
   dex_find_program_in_path(), dex_mkdir_with_parents(), and g_unlink()
 * Improved Visual Studio and clang-cl build support with C11 atomic support
 * Thread pool scheduler now falls back to POSIX backend for AIO when necessary
 * io_uring context reuse improvements
 * Extensive documentation improvements with gi-docgen annotations
 * Various bug fixes and memory leak fixes


libdex 1.0.0
============

Libdex has now reached our ceremonial 1.0 for GNOME 49.

Thanks to everyone who has helped over the past couple of years
to make that happen.


libdex 0.11.1
=============

This is a beta release for the upcoming GNOME 49

 * Ensure a full-barrier before giving callers access to a newly
   created thread pool scheduler via `get_default()`
 * Various documentation additions and fixes
 * Add async variant of `g_file_query_file_type()`
 * Add async variant of `g_file_move()`
 * Depend on gio-unix when not on Windows

libdex 0.11.0
=============

This is an alpha release for the upcoming GNOME 49

 * New dex_thread_spawn() and dex_thread_wait_for() APIs which make
   it easier to integrate with a non-dex scheduled thread.
 * Add dex_value_dup_object()
 * Add dex_async_initable_init()
 * Add dex_dbus_connection_close()
 * Add dex_file_set_attributes()
 * Various testsuite improvements

libdex 0.10.0
=============

 * Discard dependent futures if fiber was cancelled during await.
 * Discard dependent futures when finalizing DexBlock.
 * Build fix for macOS

libdex 0.9.1
============

 * Improve build checks for libatommic
 * Add dex_promise_resolve_boxed()
 * Improve cancellation of fibers
 * Use libucontext when necessary

libdex 0.9.0
============

This is an unstable release for GNOME 48.alpha

 * Support for OpenBSD
 * Raise default mmap stack size to 128kb for fibers
 * Add await/resolve API for file-descriptors
 * New dex_return_error_if_fail() precondition macro similar to
   g_return_val_if_fail()
 * Additional GIO wrapper functions including dex_file_delete() and
   dex_file_replace_contents_bytes()
 * Build system improvements

libdex 0.8.1
============

This is a stable release for GNOME 47.0

 * Fix disabling of assertions in production builds

libdex 0.8.0
============

This is a stable release for GNOME 47.0

 * Various build system improvements to help catch correctness issues.
 * Increased assertions in fibers to help Coverity discover usage patterns.
 * Avoid releasing discarded future until chained future is released.
 * Fix overflow in extremely large timeout calculation.
 * Various introspection fixes.
 * Fix inclusion from C++.

libdex 0.7.1
============

This is an beta release for GNOME 47.beta

 * Allow disabling stack protector on systems that do not support it
 * Always use ucontext.h on macOS to simplify integration there

libdex 0.7.0
============

This is an alpha release for GNOME 47.alpha

 * Various build fixes for macOS 14+
 * dex_future_new_true() and dex_future_new_false() convenience macros
 * Avoid possible linking of asm.S on Linux so that we do not make the
   GCC annobin checker unhappy.
 * Allow a NULL GObject for dex_future_new_take_object().

libdex 0.6.0
============

This is a stable release for GNOME 46

 * No changes since 0.5.1

libdex 0.5.1
============

 * Add convenience API for checking exact future status without enum
 * Lots of documentation additions

libdex 0.5.0
============

This is a beta release for GNOME 46.

 * Various API now warns about unused results to help avoid unintended
   leaks of futures.
 * dex_file_query_exists() is a new wrapper for g_file_query_exists()
 * Documentation fixes

libdex 0.4.3
============

This release contains a few more followup fixes for fallback scheduling,
particularly on Linux systems without io_uring. We've also enabled CI
to test this situation more closely as we're most likely to run into it
on distribution build systems running older Linux kernels.

 * New build options for disabling io_uring and eventfd support which
   enable testing more fallback paths in CI.
 * Worker threads will now use a GMainLoop instead iterating GMainContext
   manually.
 * An idle is used for scheduling work items directly onto a worker thread
   instead of going through the global work queue when not already running
   on a worker thread. Otherwise the lock-free work queue is used.
 * A fix for a potential deadlock when failing to create an additional
   worker thread.
 * Fix a release build warning.

libdex 0.4.2
============

This release contains an important fix for running on systems with
io_uring and recent Linux kernels.

 * io_uring AIO backend will now attempt to create the io_uring on the
   target worker thread so that IORING_SETUP_SINGLE_ISSUER may restrict
   submissions correctly.
 * Linux distributions may optionally disable liburing using the build
   time option -Dliburing=disabled. In that case, the fallback of POSIX
   IO with a thread-pool will be used.

libdex 0.4.1
============

This release includes an important fix for how io_uring CQE are handled.

libdex 0.4.0
============

This is the release for GNOME 45.

Changes in this release:

 * Documentation fix

libdex 0.3.1
============

This is the beta release for GNOME 45.

Changes in this release:

 * A new "Infinite" future type which will never resolve or reject.
 * The gio wrappers will now set debuggable names for their futures.
 * A `dex_async_pair_set_cancel_on_discard()` function has been added which
   ensures that the `GCancellable` will not be cancelled when the future
   is discarded. This can help in situations where you might repeatedly
   await on a future and do not want intermediate cancellation between
   attempts to await.
 * A `dex_input_stream_skip_async()` function has been added to wrap the
   underlying GIO function.
 * A `dex_future_disown()` function has been added which simplifies the
   case where you want a future to run but are not interested in the result.

libdex 0.3.0
============

This is the first alpha release for GNOME 45.

Changes in this release:

 * Documentation updates
 * pkg-config improvements
 * Build system improvements for GIR
 * Support for GVariant-based futures
 * New Future-based wrappers for GDBusConnection
 * The FD-based AIO API is now public, allowing for use of io_uring
   on Linux kernels that support it. If unsupported, a threadpool
   approach is used similar to GIO.
 * Improvements to introspection for language bindings.
 * You can now return NULL for a DexPromise expecting a GObject as
   as a resolved value.
 * DexFiber will now get static names associated with them when
   used from C which points to the line of code. This is only enabled
   when debugging is enabled for libdex through the use of macros.

libdex 0.2.0
============

This is the first release intended for end-users.

Changes in this release:

 * Followup fixes for building on mips
 * Fixes for introspection gi-scanner
 * Remove abstract type flag from DexFuture to satisfy GObject Introspection
   rules about constructors.
 * Many documentation/gi-annotation fixes
 * Build system improvements
 * Default to `-Dintrospection=enabled`

libdex 0.1.1
============

Changes in this release:

 * Fix soname versioning
 * Documentation improvements
 * Fix various GObject Introspection issues
 * More backports for older GLib use
 * Various ucontext fiber fixes for less-used architectures
 * Fixes for various incorrect cast-align warnings
 * Tweaks for better Forward portability
 * Add some missing g_autoptr() definitions
 * Add GCancellation integration to DexPromise

libdex 0.1.0
============

This is an initial release of libdex meant for experimentation and testing.
