Provided by: libivykis-dev_0.36.2-1_amd64 bug


       IV_SIGNAL_INIT, iv_signal_register, iv_signal_unregister - ivykis signal handling


       #include <iv_signal.h>

       struct iv_signal {
               int             signum;
               unsigned int    flags;
               void            *cookie;
               void            (*handler)(void *);

       void IV_SIGNAL_INIT(struct iv_signal *this);
       int iv_signal_register(struct iv_signal *this);
       void iv_signal_unregister(struct iv_signal *this);


       iv_signal  provides  a  way  for  ivykis(3)  applications  to  handle  POSIX  signals,  by
       integrating them with the ivykis event loop.

       An ivykis application desiring signal notification registers a struct iv_signal object  by
       calling   iv_signal_register,   after   having  initialised  it  with  IV_SIGNAL_INIT  and
       subsequently having filled in the ->signum, ->cookie and ->handler members.

       Once the signal indicated by ->signum is delivered to any thread in the  current  process,
       the  callback  specified  by  ->handler  is  scheduled to be called in the thread that the
       struct iv_signal object was registered in, with ->cookie as its sole argument.

       If the same signal arrives again  while  the  callback  function  is  still  running,  the
       callback function is guaranteed to be called again after it returns.

       It  is permitted to register multiple struct iv_signal objects for the same signal number.
       If all such objects are registered with IV_SIGNAL_FLAG_EXCLUSIVE in  ->flags  unset,  then
       all  objects  will  have their callback functions called upon arrival of the signal, in no
       guaranteed order.

       Invoking  callback  functions  stops  at  the   first   struct   iv_signal   object   with
       IV_SIGNAL_FLAG_EXCLUSIVE    in    ->flags    set,    so   that   if   all   objects   have
       IV_SIGNAL_FLAG_EXCLUSIVE set, only one callback function will be invoked.

       To deinitialize a struct iv_signal object, call iv_signal_unregister from the same  thread
       that iv_signal_register was called from on that object.

       It  is permitted to unregister a struct iv_signal object from any ivykis callback function
       in the thread it was registered in, including from a callback function triggered  by  this
       object,  and  it  is  permitted to free the memory corresponding to an unregistered object
       from its own callback function.

       It is guaranteed that signals delivered to child processes that were  created  by  fork(2)
       but that have not yet called execve(2) will not cause iv_signal callbacks to be invoked in
       the parent process.

       Internally, iv_signal is implemented using iv_event_raw(3).


       ivykis(3), iv_event_raw(3), sigaction(2)