diff options
author | Raimo Niskanen <raimo@erlang.org> | 2020-01-22 11:30:53 +0100 |
---|---|---|
committer | Raimo Niskanen <raimo@erlang.org> | 2020-01-23 17:26:26 +0100 |
commit | 3a3a1128b4e63b4b6a52628c476e6862e9d6a12b (patch) | |
tree | 98f9b58deb95688511fdf126442192f991144364 /erts | |
parent | ac4c222f96c4d24b7939be7209d8aed0abf1eb83 (diff) | |
download | erlang-3a3a1128b4e63b4b6a52628c476e6862e9d6a12b.tar.gz |
Try fix double free
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/nifs/common/socket_nif.c | 10 |
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") ); |