The FreeRADIUS server
$Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
|
BIO pipe handlers. More...
Go to the source code of this file.
Data Structures | |
struct | fr_bio_pipe_cb_funcs_t |
Functions | |
fr_bio_t * | fr_bio_pipe_alloc (TALLOC_CTX *ctx, fr_bio_pipe_cb_funcs_t *cb, size_t buffer_size) |
Allocate a thread-safe pipe which can be used for both reads and writes. More... | |
BIO pipe handlers.
Definition in file pipe.h.
struct fr_bio_pipe_cb_funcs_t |
Data Fields | ||
---|---|---|
fr_bio_callback_t | readable | |
fr_bio_callback_t | writeable |
fr_bio_t* fr_bio_pipe_alloc | ( | TALLOC_CTX * | ctx, |
fr_bio_pipe_cb_funcs_t * | cb, | ||
size_t | buffer_size | ||
) |
Allocate a thread-safe pipe which can be used for both reads and writes.
Due to talloc issues with multiple threads, if the caller wants a bi-directional pipe, this function will need to be called twice. That way a free in each context won't result in a race condition on two mutex locks.
For now, iqt's too difficult to emulate the pipe[2] behavior, where two identical "connected" things are returned, and either can be used for reading or for writing.
i.e. a pipe is really a mutex-protected memory buffer. One side should call write (and never read). The other side should call read (and never write).
The pipe should be freed only after both ends have set EOF.
Definition at line 172 of file pipe.c.