diff options
author | Micael Karlberg <[email protected]> | 2019-05-06 18:21:38 +0200 |
---|---|---|
committer | Micael Karlberg <[email protected]> | 2019-05-29 18:50:03 +0200 |
commit | 6ede678f9e7a2ba1b15c276e0e401d7990e88c51 (patch) | |
tree | 903e90d2a8eeb94e4af1af0532f50ac5e632bcc5 | |
parent | d6dddf8ec963d34c91ec92b4772ff34238f2c718 (diff) | |
download | otp-6ede678f9e7a2ba1b15c276e0e401d7990e88c51.tar.gz otp-6ede678f9e7a2ba1b15c276e0e401d7990e88c51.tar.bz2 otp-6ede678f9e7a2ba1b15c276e0e401d7990e88c51.zip |
[esock] Types and cleanup
Changed tag type tpo opaque. Also added connect (monitor and
process) cleanup.
OTP-15731
-rw-r--r-- | erts/doc/src/socket.xml | 6 | ||||
-rw-r--r-- | erts/emulator/nifs/common/socket_nif.c | 17 | ||||
-rw-r--r-- | erts/preloaded/ebin/socket.beam | bin | 75044 -> 75044 bytes | |||
-rw-r--r-- | erts/preloaded/src/socket.erl | 4 |
4 files changed, 22 insertions, 5 deletions
diff --git a/erts/doc/src/socket.xml b/erts/doc/src/socket.xml index e5cf77663a..b4e22e86a8 100644 --- a/erts/doc/src/socket.xml +++ b/erts/doc/src/socket.xml @@ -98,10 +98,14 @@ </datatype> <datatype> <name name="select_tag"/> + <desc> + <p>A tag that describes the (select) operation.</p> + </desc> </datatype> <datatype> <name name="select_ref"/> - <desc><p>A reference that uniquely identifies the (select) operation.</p> + <desc> + <p>A reference that uniquely identifies the (select) operation.</p> </desc> </datatype> <datatype> diff --git a/erts/emulator/nifs/common/socket_nif.c b/erts/emulator/nifs/common/socket_nif.c index 1a8ce89b7b..4394e7bc7c 100644 --- a/erts/emulator/nifs/common/socket_nif.c +++ b/erts/emulator/nifs/common/socket_nif.c @@ -4966,7 +4966,7 @@ ERL_NIF_TERM nconnect(ErlNifEnv* env, descP->state = SOCKET_STATE_CONNECTED; enif_set_pid_undefined(&descP->connPid); - MON_INIT(&descP->connMon); + DEMONP("nconnect -> connected", env, descP, &descP->connMon); descP->isReadable = TRUE; descP->isWritable = TRUE; @@ -5026,7 +5026,7 @@ ERL_NIF_TERM nfinalize_connection(ErlNifEnv* env, { int error; - if (descP->state != SOCKET_STATE_CONNECTING) + if (!IS_CONNECTING(descP)) return esock_make_error(env, atom_enotconn); if (!verify_is_connected(descP, &error)) { @@ -5035,6 +5035,8 @@ ERL_NIF_TERM nfinalize_connection(ErlNifEnv* env, } descP->state = SOCKET_STATE_CONNECTED; + enif_set_pid_undefined(&descP->connPid); + DEMONP("nfinalize_connection -> connected", env, descP, &descP->connMon); descP->isReadable = TRUE; descP->isWritable = TRUE; @@ -18705,6 +18707,17 @@ void socket_down(ErlNifEnv* env, MON2T(env, mon)); } + } else if (COMPARE_PIDS(&descP->connPid, pid) == 0) { + + /* The connPid is only set during the connection. + * The same goes for the monitor (connMon). + */ + + descP->state = SOCKET_STATE_OPEN; /* restore state */ + enif_set_pid_undefined(&descP->connPid); + DEMONP("socket_down -> connector", + env, descP, &descP->connMon); + } else { /* check all operation queue(s): acceptor, writer and reader. diff --git a/erts/preloaded/ebin/socket.beam b/erts/preloaded/ebin/socket.beam Binary files differindex fd8d489f36..134b4eac13 100644 --- a/erts/preloaded/ebin/socket.beam +++ b/erts/preloaded/ebin/socket.beam diff --git a/erts/preloaded/src/socket.erl b/erts/preloaded/src/socket.erl index c8d044209d..ae1ffdb4ac 100644 --- a/erts/preloaded/src/socket.erl +++ b/erts/preloaded/src/socket.erl @@ -591,8 +591,8 @@ #{level := integer(), type := integer(), data := binary()}. --type select_tag() :: atom(). --opaque select_ref() :: reference(). +-opaque select_tag() :: atom(). +-opaque select_ref() :: reference(). -record(select_info, {tag :: select_tag(), ref :: select_ref()}). |