diff options
author | Sverker Eriksson <[email protected]> | 2017-05-10 20:38:32 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2017-05-23 10:43:00 +0200 |
commit | 8543e7e6e92e0e15843f2ce0ea70513d421cd8ae (patch) | |
tree | 8a8ca9f9ccaea58db4a2471034b84fe8f7b53339 /erts/emulator/test/nif_SUITE_data | |
parent | 42d240e9144bd6219c9fd3b59ef9bc4f29bcf5f5 (diff) | |
download | otp-8543e7e6e92e0e15843f2ce0ea70513d421cd8ae.tar.gz otp-8543e7e6e92e0e15843f2ce0ea70513d421cd8ae.tar.bz2 otp-8543e7e6e92e0e15843f2ce0ea70513d421cd8ae.zip |
erts: Test monitor resource destructor from thread
which is scheduled on non-smp VM.
Diffstat (limited to 'erts/emulator/test/nif_SUITE_data')
-rw-r--r-- | erts/emulator/test/nif_SUITE_data/nif_SUITE.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c index 3747291e7e..4f0400c960 100644 --- a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c +++ b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c @@ -972,6 +972,30 @@ static ERL_NIF_TERM release_resource(ErlNifEnv* env, int argc, const ERL_NIF_TER return enif_make_atom(env,"ok"); } +static void* threaded_release_resource(void* resource) +{ + enif_release_resource(resource); +} + +static ERL_NIF_TERM release_resource_from_thread(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{ + void* resource; + ErlNifTid tid; + int err; + + if (!get_pointer(env, argv[0], &resource)) { + return enif_make_badarg(env); + } + if (enif_thread_create("nif_SUITE:release_resource_from_thread", &tid, + threaded_release_resource, resource, NULL) != 0) { + return enif_make_badarg(env); + } + err = enif_thread_join(tid, NULL); + assert(err == 0); + return atom_ok; +} + + /* * argv[0] an atom * argv[1] a binary @@ -2903,6 +2927,7 @@ static ErlNifFunc nif_funcs[] = {"make_resource", 1, make_resource}, {"get_resource", 2, get_resource}, {"release_resource", 1, release_resource}, + {"release_resource_from_thread", 1, release_resource_from_thread}, {"last_resource_dtor_call", 0, last_resource_dtor_call}, {"make_new_resource", 2, make_new_resource}, {"check_is", 11, check_is}, |