35#include "xtc_export.h"
42typedef enum xtc_res_kind {
45 XTC_RES_CHAN_SLOTS = 2,
47 XTC_RES_MEM_BYTES = 4,
48 XTC_RES_INBOX_MSGS = 5,
57typedef struct xtc_res_caps {
67#define XTC_RES_CAPS_DEFAULT { \
68 .size = sizeof(xtc_res_caps_t), \
71 .chan_slots = 1000000, \
73 .mem_bytes = 1024L * 1024 * 1024, \
77typedef struct xtc_res {
79 _Atomic int64_t used[XTC_RES__COUNT];
80 _Atomic int64_t high[XTC_RES__COUNT];
81 _Atomic int64_t rejects[XTC_RES__COUNT];
87 double alert_pct[XTC_RES__COUNT];
88 _Atomic
int alert_armed[XTC_RES__COUNT];
89 void (*alert_fn)(xtc_res_kind_t k, int64_t used,
90 int64_t cap,
void *user);
115XTC_API
int xtc_res_acquire(
xtc_res_t *r, xtc_res_kind_t k, int64_t n);
121XTC_API
void xtc_res_release(
xtc_res_t *r, xtc_res_kind_t k, int64_t n);
123XTC_API int64_t xtc_res_used(
const xtc_res_t *r, xtc_res_kind_t k);
124XTC_API int64_t xtc_res_high(
const xtc_res_t *r, xtc_res_kind_t k);
125XTC_API int64_t xtc_res_rejects(
const xtc_res_t *r, xtc_res_kind_t k);
132XTC_API
void xtc_res_set_cap(
xtc_res_t *r, xtc_res_kind_t k, int64_t cap);
144XTC_API
int xtc_res_set_alert(
xtc_res_t *r, xtc_res_kind_t k,
double pct);
145XTC_API
int xtc_res_set_alert_fn(
xtc_res_t *r,
146 void (*fn)(xtc_res_kind_t, int64_t, int64_t,
void *),
176XTC_API
int xtc_res_attach_mctx(
xtc_res_t *r,
struct xtc_mctx *m);
177XTC_API
int xtc_res_attach_net(
xtc_res_t *r);