postwait_post_deferred(3c) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

postwait_post_deferred(3c)

postwait_post(3C)        Standard C Library Functions        postwait_post(3C)

NAME
       postwait_post,   postwait_postn,  postwait_post_deferred  -  Post  user
       events to a key to notify one or more waiters.

SYNOPSIS
       #include <port.h>


       int postwait_post(postwkey_t key, int uevents, uintptr_t udata);


       int postwait_postn(postwkey_t klist[], postwkey_uevdata_t userd[], int errors[], uint_t nent);


       int postwait_post_deferred(postwkey_t key, int flags, int uevents, uintptr_t udata);

DESCRIPTION
       The  postwait_post(),  postwait_postn(),  and  postwait_post_deferred()
       functions  allow  threads  to post events as part of a post-wait mecha‐
       nism. Threads can wait and retrieve these events via event ports.


       Post events consist of an user defined integer type event  and  an  un‐
       signed  long item of opaque user data. Both fields are available to the
       receiving threads.


       The post-wait mechanism can be used between threads in the same or dif‐
       ferent processes. A key is used as the rendezvous point for posting and
       waiting; these 64 bit keys are generated  by  postwait_genkey(3C)  call
       and shared with other processes using any desired form of IPC. No limi‐
       tations are placed on which processes may use which keys.


       The  postwait_post() function causes an event of type PORT_SOURCE_POST‐
       WAIT and the associated user values to be delivered to any event  ports
       that  are  associated with the specified key. For more information, see
       port_associate(3C).


       The postwait_postn() function posts multiple post  events  to  multiple
       keys  with  one system call. Passing NULL for the errors argument could
       cause this function to post asynchronously with the help of  background
       worker  threads.  The  list  of  keys to be posted to are passed in the
       klist array argument. The corresponding user events and user  data  are
       passed  in  the  array of struct postwkey_uevdata_t. The number of ele‐
       ments of this array is specified in nent  argument.  Passing  NULL  for
       userd causes 0 to be used as the value of uevents and udata.


       The postwkey_uevdata_t structure contains the following members:



         int          pwev_uevents;
         uintptr_t    pwev_udata;



       The  postwait_post_deferred()  function  is  for registering a deferred
       post. With PWPOST_ATEXIT specified in flags, the deferred post  is  de‐
       livered  when  the thread that registered the post exits the containing
       process exits or is killed. Calling  postwait_post_deferred() with  PW‐
       POST_CANCEL  flag  will cancel any outstanding deferred post registered
       for the key by this thread. There can be only one deferred post  regis‐
       tered by a thread per key.


       If PWPOST_VALIDATE_KEY is or'd with PWPOST_ATEXIT, it checks if the key
       specified is associated with an event port or not. If not, the deferred
       post registration for that key will fail.


       To  receive  post  events, the key needs to be associated with an event
       port. Threads collect the post events from the event port. Delivery  of
       the post event and user values is determined by the associating type of
       key.  Two types of association are permitted: counting and queuing. For
       more information, see port_associate(3C).


       For a counting type association, multiple posts that occur  before  the
       event  is retrieved will be combined resulting in just one event deliv‐
       ery to the event port. A count indicating how many times  the  key  was
       posted  since the last time that an event for that key was collected is
       returned along with the event. Both the user event and  the  user  data
       submitted with the post will be ignored for this type of association.


       For  a queuing type association, one event for each post will be queued
       on the event port. The user event and user data  passed  are  delivered
       with  the  posted event. The number of events that can get queued on an
       event port is subject to the  process.max-port-events  resource  limit.
       For more information, see the rctladm(8) man page.


       The  count and the user values are delivered in the port_event_t struc‐
       ture. The events from an event port are collected using port_get(3C) or
       port_getn(3C) calls.


       If a key is associated with more than one event port, a  post  to  that
       key will result in delivery of the same event to each of those ports.

RETURN VALUES
       Upon  successful  completion, postwait_post() will return 0. Otherwise,
       it will return -1 and sets errno to indicate the error.


       In the synchronous mode, the postwait_postn() function returns the num‐
       ber of successfully submitted events. A non-negative return value  less
       than  the nent argument indicates that at least one error has occurred.
       In this case, each element of the errors[] array is filled in. An  ele‐
       ment  of  the errors[] array is set to 0 if the post event was success‐
       fully sent to the corresponding key in the klist[] array, or is set  to
       indicate the error if not successful.


       In  the asynchronous mode, postwait_postn() function returns the number
       of successfully handed-off events. If an error occurs  with  the  post‐
       wait_postn() call, it returns -1 and sets errno to indicate the error.


       The  postwait_post_deferred()  function returns 0, if the deferred post
       is registered or cancelled successfully. Otherwise it  returns  -1  and
       the errno is set to indicate the error.

ERRORS
       The  postwait_post()  and  synchronous  mode postwait_postn() functions
       will fail if:

       EAGAIN    The maximum number of events per port is exceeded. The  maxi‐
                 mum  allowable number of events per port is the minimum value
                 of the process.max-port-events resource control at  the  time
                 port_create(3C)  was called to create the event port to which
                 the key is associated.


       EBADF     The event cannot be delivered as the specified key  currently
                 is not associated with any event ports.



       The postwait_post() and postwait_postn() functions will fail if:


       ENOMEM    There is not enough memory available to satisfy the request.




       The postwait_postn() function will fail if:

       EFAULT    The klist[] or userd[] or errors[] pointer is invalid.



       The postwait_post_deferred() function will fail if:

       EBUSY     If there is already a deferred post registered for the speci‐
                 fied key.


       EINVAL    If  the PWPOST_CANCEL flag is passed and there is no deferred
                 post registered for the specified key or the value passed  in
                 flags argument are invalid.


       EAGAIN    If  the  thread  has already registered maximum number of al‐
                 lowed deferred posts  defined  by  process.max-deferred-posts
                 resource control.


       EBADF     If  PWPOST_VALIDATE_KEY flag was or'd with PWPOST_ATEXIT, and
                 the key specified is currently not associated with any  port.
                 Note that after the key has been validated here, it is possi‐
                 ble  that the process that has associated the key can exit or
                 get killed. As a result, the key may no longer  be  associate
                 with  any event port. However, a different process can subse‐
                 quently associate the same key with an event port.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE VALUE _ Interface StabilityCommitted _ MT-LevelSafe, Async-Sig‐
       nal-Safe


SEE ALSO
       port_create(3C),   port_sendn(3C),  postwait_genkey(3C),  resource-con‐
       trols(7)

Oracle Solaris 11.4               11 May 2021                postwait_post(3C)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3