API revisions

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().

rev. 18 (libevl r26)

Introduces the socket interface:

  • oob_recvmsg() to receive a message in out-of-band mode.

  • oob_sendmsg() to send a message in out-of-band mode.

The regular socket(2) call as extended by ABI 26 is capable of creating oob-capable sockets when receiving the SOCK_OOB type flag, so there is no EVL-specific call for this operation.

rev. 17 (libevl r17)

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.

rev. 16 (libevl r17)

Introduces the API changes for supporting the new Observable element:

rev. 15 (libevl r16)

Adds evl_set_thread_mode() and evl_clear_thread_mode().

rev. 14

Adds evl_unblock_thread() and evl_demote_thread().

rev. 13

Adds evl_yield().

rev. 12 (libevl r15)

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.

rev. 11 (libevl r14)

For naming consistency, evl_sched_control() was renamed evl_control_sched().

Last modified: Sat, 21 Aug 2021 18:26:39 CEST