blob: cd0ecf4b54b1d2e769e97c59c2a25f1a1929f3d9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
typedef struct call_info_t
{
struct call_info_t* next;
unsigned lib_ver;
int static_cntA;
int static_cntB;
char* arg;
int arg_sz;
char func_name[1]; /* must be last */
}CallInfo;
#define RT_MAX 5
typedef struct
{
ErlNifMutex* mtx;
int calls;
int ref_cnt;
CallInfo* call_history;
ErlNifResourceType* rt_arr[RT_MAX];
}NifModPrivData;
#define NifModPrivData_release(NMPD) \
do { \
int is_last; \
enif_mutex_lock((NMPD)->mtx); \
is_last = (--(NMPD)->ref_cnt == 0); \
enif_mutex_unlock((NMPD)->mtx); \
if (is_last) { \
enif_mutex_destroy((NMPD)->mtx); \
enif_free((NMPD)); \
} \
}while (0)
|