logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

IV_EVENT_RAW_INIT, iv_event_raw_register, iv_event_raw_unregister, iv_event_raw_post - manage ivykis

Description

iv_event_raw provides a way for delivering events to  ivykis(3)  recipients  across  thread  and  process
       boundaries.

       The  intended  event recipient calls IV_EVENT_RAW_INIT on a structiv_event_raw object, fills in ->cookie
       and ->handler, and then calls iv_event_raw_register on the object.

       To generate an event, call iv_event_raw_post on the previously initialized  structiv_event_raw  object.
       This  will  cause  the  callback  specified  by  ->handler  to  be  called  in the thread that the structiv_event_raw object was registered in, with ->cookie as its sole argument.

       To deinitialize a structiv_event_raw object, call iv_event_raw_unregister  from  the  same  thread  that
       iv_event_raw_register was called from on that object.

       It  is  permitted  to  unregister  a  structiv_event_raw 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.

       iv_event_raw_post  can  be called from the same thread that iv_event_raw_register was called from, from a
       different thread in the same process, or even from a different process, and can  safely  be  called  from
       signal handlers.

       If  posting  an  event  only  ever  needs  to be done from within the same process, see iv_event(3) for a
       lighter-weight alternative to iv_event_raw.

       Internally, iv_event_raw is implemented by registering a file descriptor (a  struct  iv_fd(3))  with  the
       recipient  thread's ivykis event loop, and by causing that file descriptor to become readable upon a call
       to iv_event_raw_post.

       If eventfd(2) is available, it will be used to procure  the  abovementioned  file  descriptor.   If  not,
       iv_event_raw will fall back to pipe(2) as the source of its file descriptors.  eventfd(2) is preferred as
       it  requires  only one file descriptor table entry (while pipe(2) requires two), and has much less kernel
       overhead than pipe(2) has.

Name

       IV_EVENT_RAW_INIT,  iv_event_raw_register,  iv_event_raw_unregister,  iv_event_raw_post  -  manage ivykis
       objects for event notification

See Also

ivykis(3), iv_event(3), eventfd(2), pipe(2)

ivykis                                             2010-09-02                                    iv_event_raw(3)

Synopsis

#include<iv_event_raw.h>

       struct iv_event_raw {
               void            *cookie;
               void            (*handler)(void *);
       };

       voidIV_EVENT_RAW_INIT(structiv_event_raw*this);intiv_event_raw_register(structiv_event_raw*this);voidiv_event_raw_unregister(structiv_event_raw*this);voidiv_event_raw_post(conststructiv_event_raw*this);

See Also