aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test/nif_SUITE_data/nif_mod.h
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)