![]() |
The FreeRADIUS server $Id: a4e7f8c94e8038b7627bcf52356b7ed15955c1d7 $
|
BIO abstractions for in-memory pipes. More...
#include <freeradius-devel/bio/bio_priv.h>#include <freeradius-devel/bio/null.h>#include <freeradius-devel/bio/buf.h>#include <freeradius-devel/bio/pipe.h>#include <pthread.h>
Include dependency graph for pipe.c:Go to the source code of this file.
Data Structures | |
| struct | fr_bio_pipe_t |
| The pipe bio. More... | |
Functions | |
| fr_bio_t * | fr_bio_pipe_alloc (TALLOC_CTX *ctx, fr_bio_cb_funcs_t *cb, size_t buffer_size) |
| Allocate a thread-safe pipe which can be used for both reads and writes. | |
| static int | fr_bio_pipe_destructor (fr_bio_pipe_t *my) |
| static int | fr_bio_pipe_eof (fr_bio_t *bio) |
| Set EOF. | |
| static ssize_t | fr_bio_pipe_read (fr_bio_t *bio, UNUSED void *packet_ctx, void *buffer, size_t size) |
| Read from the pipe. | |
| static int | fr_bio_pipe_shutdown (fr_bio_t *bio) |
| Shutdown callback. | |
| static ssize_t | fr_bio_pipe_shutdown_write (UNUSED fr_bio_t *bio, UNUSED void *packet_ctx, UNUSED void const *buffer, UNUSED size_t size) |
| static ssize_t | fr_bio_pipe_write (fr_bio_t *bio, UNUSED void *packet_ctx, void const *buffer, size_t size) |
| Write to the pipe. | |
BIO abstractions for in-memory pipes.
Definition in file pipe.c.
| struct fr_bio_pipe_t |
Collaboration diagram for fr_bio_pipe_t:| Data Fields | ||
|---|---|---|
| fr_bio_buf_t | buf | for reading and writing |
| bool | eof | are we at EOF? |
| FR_BIO_COMMON | ||
| pthread_mutex_t | mutex | |
| fr_bio_t * fr_bio_pipe_alloc | ( | TALLOC_CTX * | ctx, |
| fr_bio_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, it'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 187 of file pipe.c.
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
|
static |
|
static |
Shutdown callback.
We just set the EOF flag, which means that the other end stops using it. fr_bio_shutdown() mangles the read and write callbacks, so we don't need to do that here.
Definition at line 124 of file pipe.c.
Here is the caller graph for this function:
1.9.8