aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test/nif_SUITE_data
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2016-12-16 16:26:08 +0100
committerSverker Eriksson <[email protected]>2016-12-19 19:18:57 +0100
commit861b276f27952ecbb5a89748b86b7513946617f3 (patch)
tree530589c1951e1c352bfe0adcc4e66f2e5a829a12 /erts/emulator/test/nif_SUITE_data
parent387ff8e3347d21e9ca5ad3d8c3a694bc79d38bca (diff)
downloadotp-861b276f27952ecbb5a89748b86b7513946617f3.tar.gz
otp-861b276f27952ecbb5a89748b86b7513946617f3.tar.bz2
otp-861b276f27952ecbb5a89748b86b7513946617f3.zip
nif_SUITE: Add last_fd_stop_call
Diffstat (limited to 'erts/emulator/test/nif_SUITE_data')
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_SUITE.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
index 878a9ffda9..813d19ae90 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
@@ -2087,7 +2087,9 @@ static ERL_NIF_TERM pipe_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
enif_release_resource(read_rsrc);
enif_release_resource(write_rsrc);
- return enif_make_tuple2(env, read_fd, write_fd);
+ return enif_make_tuple2(env,
+ enif_make_tuple2(env, read_fd, make_pointer(env, read_rsrc)),
+ enif_make_tuple2(env, write_fd, make_pointer(env, write_rsrc)));
}
static ERL_NIF_TERM write_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
@@ -2176,17 +2178,37 @@ static void fd_resource_dtor(ErlNifEnv* env, void* obj)
}
}
+static struct {
+ void* obj;
+ int was_direct_call;
+}last_fd_stop;
+int fd_stop_cnt = 0;
+
static void fd_resource_stop(ErlNifEnv* env, void* obj, ErlNifEvent fd,
int is_direct_call)
{
struct fd_resource* fdr = (struct fd_resource*)obj;
assert(fd == fdr->fd);
assert(fd >= 0);
+
+ last_fd_stop.obj = obj;
+ last_fd_stop.was_direct_call = is_direct_call;
+ fd_stop_cnt++;
+
close(fd);
fdr->fd = -1; /* thread safety ? */
fdr->was_selected = 0;
}
+static ERL_NIF_TERM last_fd_stop_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM last, ret;
+ last = enif_make_tuple2(env, make_pointer(env, last_fd_stop.obj),
+ enif_make_int(env, last_fd_stop.was_direct_call));
+ ret = enif_make_tuple2(env, enif_make_int(env, fd_stop_cnt), last);
+ fd_stop_cnt = 0;
+ return ret;
+}
static ErlNifFunc nif_funcs[] =
@@ -2270,7 +2292,8 @@ static ErlNifFunc nif_funcs[] =
{"pipe_nif", 0, pipe_nif},
{"write_nif", 2, write_nif},
{"read_nif", 2, read_nif},
- {"is_closed_nif", 1, is_closed_nif}
+ {"is_closed_nif", 1, is_closed_nif},
+ {"last_fd_stop_call", 0, last_fd_stop_call}
};
ERL_NIF_INIT(nif_SUITE,nif_funcs,load,NULL,upgrade,unload)