27typedef enum xtc_res_kind {
30 XTC_RES_CHAN_SLOTS = 2,
32 XTC_RES_MEM_BYTES = 4,
33 XTC_RES_INBOX_MSGS = 5,
42typedef struct xtc_res_caps {
51#define XTC_RES_CAPS_DEFAULT { \
54 .chan_slots = 1000000, \
56 .mem_bytes = 1024L * 1024 * 1024, \
60typedef struct xtc_res {
62 _Atomic int64_t used[XTC_RES__COUNT];
63 _Atomic int64_t high[XTC_RES__COUNT];
64 _Atomic int64_t rejects[XTC_RES__COUNT];
70 double alert_pct[XTC_RES__COUNT];
71 _Atomic
int alert_armed[XTC_RES__COUNT];
72 void (*alert_fn)(xtc_res_kind_t k, int64_t used,
73 int64_t cap,
void *user);
96int xtc_res_acquire(
xtc_res_t *r, xtc_res_kind_t k, int64_t n);
102void xtc_res_release(
xtc_res_t *r, xtc_res_kind_t k, int64_t n);
104int64_t xtc_res_used(
const xtc_res_t *r, xtc_res_kind_t k);
105int64_t xtc_res_high(
const xtc_res_t *r, xtc_res_kind_t k);
106int64_t xtc_res_rejects(
const xtc_res_t *r, xtc_res_kind_t k);
107void xtc_res_set_cap(
xtc_res_t *r, xtc_res_kind_t k, int64_t cap);
117int xtc_res_set_alert(
xtc_res_t *r, xtc_res_kind_t k,
double pct);
119 void (*fn)(xtc_res_kind_t, int64_t, int64_t,
void *),