aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2019-02-06 16:29:34 +0100
committerMicael Karlberg <[email protected]>2019-02-22 19:45:52 +0100
commitb278a8bba833a681d692fc95f3c77c57f2d0ac69 (patch)
treebc8896afa5509ade09e7ecd0fed2278a5c579608 /erts
parenta217c7185727cd69da5f780ac63b68b46bc1d9b4 (diff)
downloadotp-b278a8bba833a681d692fc95f3c77c57f2d0ac69.tar.gz
otp-b278a8bba833a681d692fc95f3c77c57f2d0ac69.tar.bz2
otp-b278a8bba833a681d692fc95f3c77c57f2d0ac69.zip
[socket-nif] Fix currentReader/Writer always set at enif_select
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/nifs/common/socket_nif.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/erts/emulator/nifs/common/socket_nif.c b/erts/emulator/nifs/common/socket_nif.c
index 843fe2440f..f97e5b6867 100644
--- a/erts/emulator/nifs/common/socket_nif.c
+++ b/erts/emulator/nifs/common/socket_nif.c
@@ -13584,14 +13584,14 @@ ERL_NIF_TERM send_check_result(ErlNifEnv* env,
/* Ok, try again later */
SSDBG( descP, ("SOCKET", "send_check_result -> try again\r\n") );
-
- SELECT(env, descP->sock, (ERL_NIF_SELECT_WRITE), descP, NULL, sendRef);
-
- return esock_make_error(env, esock_atom_eagain);
-
}
}
+ else {
+ SSDBG( descP,
+ ("SOCKET", "send_check_result -> "
+ "not entire package written (%d of %d)\r\n", written, dataSize) );
+ }
/* We failed to write the *entire* packet (anything less then size
* of the packet, which is 0 <= written < sizeof packet),
@@ -13617,12 +13617,10 @@ ERL_NIF_TERM send_check_result(ErlNifEnv* env,
SELECT(env, descP->sock, (ERL_NIF_SELECT_WRITE), descP, NULL, sendRef);
- SSDBG( descP,
- ("SOCKET", "send_check_result -> "
- "not entire package written (%d of %d)\r\n", written, dataSize) );
-
- return esock_make_ok2(env, MKI(env, written));
-
+ if (written >= 0)
+ return esock_make_ok2(env, MKI(env, written));
+ else
+ return esock_make_error(env, esock_atom_eagain);
}
@@ -14096,6 +14094,11 @@ ERL_NIF_TERM recv_check_result(ErlNifEnv* env,
SSDBG( descP, ("SOCKET", "recv_check_result -> [%d] "
"only part of message - expect more\r\n", toRead) );
+ if ((xres = recv_init_current_reader(env, descP, recvRef)) != NULL) {
+ FREE_BIN(bufP);
+ return esock_make_error_str(env, xres);
+ }
+
/* SELECT for more data */
SELECT(env, descP->sock, (ERL_NIF_SELECT_READ),