mesg_port
—
generic message ports
PDEL Library (libpdel, -lpdel)
#include <pthread.h>
#include <pdel/util/mesg_port.h>
struct mesg_port *
mesg_port_create
(const
char *mtype);
void
mesg_port_destroy
(struct
mesg_port **portp);
int
mesg_port_put
(struct
mesg_port *port, void
*data);
void *
mesg_port_get
(struct
mesg_port *port, int
timeout);
u_int
mesg_port_qlen
(struct
mesg_port *port);
These functions implement a message port for inter-thread communication.
mesg_port_create
() creates a new messge
port, using
typed_mem(3)
type mtype for internal memory allocation.
mesg_port_destroy
() destroys the message
port pointed to by *portp. There must be no messages
in the message port, otherwise mesg_port_destroy
()
aborts with an assertion failure. Upon return, *portp
will be set to NULL
. If *portp
is already NULL
when
mesg_port_destroy
() is invoked, nothing happens.
mesg_port_put
() writes the message
represented by data to the message port pointed to by
port. The data may not be
NULL
.
mesg_port_get
() retrieves the next
available message written to the message port pointed to by
port. Messages are read in the same order as they are
written. If there are no messages, mesg_port_get
()
waits for up to timeout milliseconds, or indefinitely
if timeout is negative. The thread calling
mesg_port_get
() may be canceled without ill
effect.
mesg_port_qlen
() returns the current
number of messages queued on the message port pointed to by
port.
mesg_port_put
(),
mesg_port_get
(), and
mesg_port_qlen
() may be called safely at the same
time from different threads.
mesg_port_create
(),
mesg_port_put
(), and
mesg_port_get
() return NULL
or
-1 to indicate an error, with errno set appropriately.
The PDEL library was developed at Packet Design, LLC.
http://www.packetdesign.com/
Archie Cobbs ⟨archie@freebsd.org⟩