22#include "xtc_export.h"
29typedef enum xtc_res_kind {
32 XTC_RES_CHAN_SLOTS = 2,
34 XTC_RES_MEM_BYTES = 4,
35 XTC_RES_INBOX_MSGS = 5,
44typedef struct xtc_res_caps {
53#define XTC_RES_CAPS_DEFAULT { \
56 .chan_slots = 1000000, \
58 .mem_bytes = 1024L * 1024 * 1024, \
62typedef struct xtc_res {
64 _Atomic int64_t used[XTC_RES__COUNT];
65 _Atomic int64_t high[XTC_RES__COUNT];
66 _Atomic int64_t rejects[XTC_RES__COUNT];
72 double alert_pct[XTC_RES__COUNT];
73 _Atomic
int alert_armed[XTC_RES__COUNT];
74 void (*alert_fn)(xtc_res_kind_t k, int64_t used,
75 int64_t cap,
void *user);
98XTC_API
int xtc_res_acquire(
xtc_res_t *r, xtc_res_kind_t k, int64_t n);
104XTC_API
void xtc_res_release(
xtc_res_t *r, xtc_res_kind_t k, int64_t n);
106XTC_API int64_t xtc_res_used(
const xtc_res_t *r, xtc_res_kind_t k);
107XTC_API int64_t xtc_res_high(
const xtc_res_t *r, xtc_res_kind_t k);
108XTC_API int64_t xtc_res_rejects(
const xtc_res_t *r, xtc_res_kind_t k);
109XTC_API
void xtc_res_set_cap(
xtc_res_t *r, xtc_res_kind_t k, int64_t cap);
119XTC_API
int xtc_res_set_alert(
xtc_res_t *r, xtc_res_kind_t k,
double pct);
120XTC_API
int xtc_res_set_alert_fn(
xtc_res_t *r,
121 void (*fn)(xtc_res_kind_t, int64_t, int64_t,
void *),