26RCSIDH(coord_h,
"$Id: f93afd986e308bf1c181410b61234ea58b8be6ec $")
28#include <freeradius-devel/io/control.h>
29#include <freeradius-devel/io/message.h>
30#include <freeradius-devel/server/cf_util.h>
31#include <freeradius-devel/util/dbuff.h>
32#include <freeradius-devel/util/semaphore.h>
57#define FR_COORD_CALLBACK_TERMINATOR { .callback = NULL }
static size_t num_workers
A coordinator registration.
A coordinator which receives messages from workers.
The worker end of worker <-> coordinator communication.
int fr_coords_create(TALLOC_CTX *ctx, fr_event_list_t *el)
Start coordinators in single threaded mode.
fr_coord_reg_t * fr_coord_register(TALLOC_CTX *ctx, fr_coord_reg_ctx_t *reg_ctx)
Register a coordinator.
fr_coord_worker_t * fr_coord_attach(TALLOC_CTX *ctx, fr_event_list_t *el, fr_coord_reg_t *coord_reg)
Attach a worker to a coordinator.
int fr_coord_to_worker_send(fr_coord_t *coord, uint32_t worker_id, uint32_t cb_id, fr_dbuff_t *dbuff)
Send generic data from a coordinator to a worker.
fr_coord_cb_reg_t * coord_cb
Callbacks for worker -> coordinator messages.
void fr_coord_deregister(fr_coord_reg_t *coord_reg)
De-register a coordinator.
void fr_coords_destroy(void)
Clean up coordinators in single threaded mode.
int fr_worker_to_coord_send(fr_coord_worker_t *cw, uint32_t cb_id, fr_dbuff_t *dbuff)
Send data from a worker to a coordinator.
void(* fr_coord_worker_cb_t)(fr_coord_worker_t *cw, fr_dbuff_t *dbuff, fr_time_t now, void *uctx)
int fr_coord_post_event_insert(fr_event_list_t *el)
Insert instance specific post-event callbacks.
int fr_coord_pre_event_insert(fr_event_list_t *el)
Insert instance specific pre-event callbacks.
char const * name
Name for this coordinator.
fr_coord_worker_cb_t callback
size_t coord_send_size
Initial ring buffer size for coordinator -> worker data.
void(* fr_coord_cb_t)(fr_coord_t *coord, uint32_t worker_id, fr_dbuff_t *dbuff, fr_time_t now, void *plugin_data, void *uctx)
fr_coord_worker_cb_reg_t * worker_cb
Callbacks for coordinator -> worker messages.
int fr_coord_start(uint32_t num_workers, fr_sem_t *sem)
Start all registered coordinator threads in multi-threaded mode.
size_t worker_send_size
Initial ring buffer size for worker -> coordinator data.
int fr_coord_to_worker_broadcast(fr_coord_t *coord, uint32_t cb_id, fr_dbuff_t *dbuff)
Broadcast data from a coordinator to all workers.
int fr_coord_detach(fr_coord_worker_t *cw, bool exiting)
Signal a coordinator that a worker wants to detach.
fr_coord_cb_inst_create_t inst_create
fr_coord_cb_inst_t *(* fr_coord_cb_inst_create_t)(TALLOC_CTX *ctx, fr_coord_t *coord, fr_event_list_t *el, bool single_thread, void *uctx)
Stores all information relating to an event list.
static _Thread_local int worker_id
Internal ID of the current worker thread.
static fr_event_list_t * el