File: nif_mod.h

package info (click to toggle)
erlang 1%3A17.3-dfsg-4%2Bdeb8u2
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 173,700 kB
  • sloc: erlang: 1,354,179; xml: 365,926; ansic: 325,720; cpp: 50,390; makefile: 23,663; java: 10,540; sh: 10,013; lisp: 8,056; python: 4,826; pascal: 3,263; asm: 2,904; perl: 2,853; tcl: 245; sed: 86
file content (38 lines) | stat: -rw-r--r-- 840 bytes parent folder | download | duplicates (10)
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
35
36
37
38
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 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); \
	    while ((NMPD)->call_history) { \
	        CallInfo* next = (NMPD)->call_history->next; \
		enif_free((NMPD)->call_history); \
		(NMPD)->call_history = next; \
	    } \
	    enif_free((NMPD)); \
        } \
    }while (0)