aboutsummaryrefslogtreecommitdiffstats
path: root/c_src/nif_helpers.h
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-05-01 16:37:28 +0200
committerLoïc Hoguin <[email protected]>2014-05-01 16:37:28 +0200
commit6434c3b970e987b8a2f311d67b359506eaeed4eb (patch)
treeaf7ea05b87d98f1363846142f79924ee6aee3266 /c_src/nif_helpers.h
parentc087ef30ab6b40e331863f90b1f067f1c3a7a5d2 (diff)
downloadesdl2-6434c3b970e987b8a2f311d67b359506eaeed4eb.tar.gz
esdl2-6434c3b970e987b8a2f311d67b359506eaeed4eb.tar.bz2
esdl2-6434c3b970e987b8a2f311d67b359506eaeed4eb.zip
Make sure the window is never released before the renderer
Tentative fix for an OSX VM crash when the owner process dies.
Diffstat (limited to 'c_src/nif_helpers.h')
-rw-r--r--c_src/nif_helpers.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/c_src/nif_helpers.h b/c_src/nif_helpers.h
index ab61998..c1d4131 100644
--- a/c_src/nif_helpers.h
+++ b/c_src/nif_helpers.h
@@ -53,15 +53,19 @@
void dtor_ ## r(ErlNifEnv*, void*); \
typedef struct { \
NIF_RES_TYPE(r)* v; \
+ void* dep; \
} obj_ ## r;
#define NIF_RES_INIT(r) \
res_ ## r = enif_open_resource_type(env, NULL, TO_STRING(NIF_RES_TYPE(r)), dtor_ ## r, ERL_NIF_RT_CREATE, NULL); \
if (!res_ ## r) return -1;
#define NIF_RES_GET(r, obj) (((obj_ ## r*)obj)->v)
-#define NIF_RES_TO_TERM(r, val, term) { \
+#define NIF_RES_DEP(r, obj) (((obj_ ## r*)obj)->dep)
+#define NIF_RES_TO_TERM(r, val, term) NIF_RES_TO_TERM_WITH_DEP(r, val, term, NULL)
+#define NIF_RES_TO_TERM_WITH_DEP(r, val, term, dep_res) { \
obj_ ## r* res = enif_alloc_resource(res_ ## r, sizeof(obj_ ## r)); \
res->v = val; \
+ res->dep = dep_res; \
term = enif_make_resource(env, res); \
enif_release_resource(res); \
}