summaryrefslogtreecommitdiff
path: root/erts
diff options
context:
space:
mode:
authorRaimo Niskanen <raimo@erlang.org>2020-01-22 11:30:53 +0100
committerRaimo Niskanen <raimo@erlang.org>2020-01-23 17:26:26 +0100
commit3a3a1128b4e63b4b6a52628c476e6862e9d6a12b (patch)
tree98f9b58deb95688511fdf126442192f991144364 /erts
parentac4c222f96c4d24b7939be7209d8aed0abf1eb83 (diff)
downloaderlang-3a3a1128b4e63b4b6a52628c476e6862e9d6a12b.tar.gz
Try fix double free
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/nifs/common/socket_nif.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/erts/emulator/nifs/common/socket_nif.c b/erts/emulator/nifs/common/socket_nif.c
index 3482c1e950..2519fb8897 100644
--- a/erts/emulator/nifs/common/socket_nif.c
+++ b/erts/emulator/nifs/common/socket_nif.c
@@ -19678,6 +19678,7 @@ char* esock_send_close_msg(ErlNifEnv* env,
{
ERL_NIF_TERM sockRef, msg;
ErlNifEnv* menv;
+ char* result;
if (descP->closeEnv != NULL) {
sockRef = enif_make_resource(descP->closeEnv, descP);
@@ -19689,7 +19690,9 @@ char* esock_send_close_msg(ErlNifEnv* env,
menv = NULL; // This has the effect that the message will be copied
}
- return esock_send_msg(env, pid, msg, menv);
+ result = esock_send_msg(env, pid, msg, menv);
+ descP->closeEnv = NULL;
+ return result;
}
@@ -20735,7 +20738,10 @@ void esock_stop(ErlNifEnv* env, void* obj, int fd, int is_direct_call)
}
}
- esock_free_env("esoc_stop - meta-env", descP->meta.env);
+ if (descP->meta.env != NULL) {
+ esock_free_env("esock_stop - meta-env", descP->meta.env);
+ descP->meta.env = NULL;
+ }
SSDBG( descP, ("SOCKET", "esock_stop -> unlock all mutex(s)\r\n") );