You can obtain the current API revision of libevl either at compilation time using the
value of the __EVL__
macro defined in the <evl/evl.h>
main header
file, or dynamically by calling evl_get_version().
Enables HM support for threads. Since ABI 23, the core is able to channel T_WOSS, T_WOLI and T_WOSX error notifications (SIGDEBUG_xxx) through the thread observable component if present. Introduce the T_HMSIG and T_HMOBS mode bits for configuring the HM notification source(s) of a thread with evl_set_thread_mode().
SIGDEBUG_xxx codes are renamed to EVL_HMDIAG_xxx diag codes, so that we have a single nomenclature for these errors regardless of whether threads are notified via SIGDEBUG or their observable component.
Introduces the API changes for supporting the new Observable element:
adds evl_subscribe() and evl_unsubscribe() to the thread API.
adds the evl_create_observable(), evl_update_observable() and evl_read_observable() services for the new Observable API.
allows to pass an opaque data to evl_add_pollfd() and
evl_mode_pollfd(), which is
returned into the struct evl_poll_event
descriptor.
Adds evl_set_thread_mode() and evl_clear_thread_mode().
Adds evl_unblock_thread() and evl_demote_thread().
Adds evl_yield().
Element visibility is introduced, as a result:
Most element classes provides a new long-form evl_create_*() call,
in order to receive creation flags. Currently, the visibility
attribute of elements is the only flag supported (see
EVL_CLONE_PRIVATE
, EVL_CLONE_PUBLIC
). The additional creation
calls are evl_create_event(),
evl_create_flags(),
evl_create_mutex(),
evl_create_proxy(),
evl_create_sem() and
evl_create_xbuf(). Likewise, the
new evl_attach_thread() and
evl_detach_thread() calls
receive attachment and detachment flags for
threads. evl_attach_self() is now
equivalent to attaching a private thread by default, unless the
thread name says otherwise. evl_detach_self() is unchanged.
All evl_new_*() calls become shorthands to their respective evl_create_*() counterparts, picking reasonable default creation parameters for the new element, including private visibility (unless overriden by the leading slash rule explained in this document).
All long-form evl_new_*_any() calls have been removed from the API. Applications should use the corresponding evl_create_*() call instead.
evl_new_proxy() creates a proxy element with no write granularity by default, which caused this this parameter to be dropped from the call signature. Applications should use evl_create_proxy() to specify a non-default granularity.
evl_new_xbuf() creates a cross-buffer element with identically sized input and output buffers by default, which caused one of the two size parameters to be dropped from the call signature. Applications should use evl_create_xbuf() to specify distinct sizes for input and output.
All former long-form static initializers EVL_*_ANY_INITIALIZER() have been renamed EVL_*_INITIALIZER(), dropping the former short-form (if any). For instance, EVL_MUTEX_ANY_INITIALIZER() has been renamed EVL_MUTEX_INITIALIZER(), with an additional parameter for mentioning both the lock type and visibility attribute.
Selecting the lock type of a mutex is now done using the
evl_create_mutex() call, ORing
either EVL_MUTEX_NORMAL
or EVL_MUTEX_RECURSIVE
into the creation
flags. This method replaces the type argument to the former
evl_new_mutex_any() call.
For naming consistency, evl_sched_control() was renamed evl_control_sched().
Last modified: Sun, 03 May 2020 11:26:15 CEST