aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/sys/unix
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2019-04-01 11:55:11 +0200
committerLukas Larsson <[email protected]>2019-04-09 14:18:00 +0200
commit04c57e50c50d167b65c625d6a9fece8d7b4c7954 (patch)
tree1184604d9e990f883130f042ae7fb44c3151521e /erts/emulator/sys/unix
parent1feae54b6a313f7a35ca1671e3c50f8b434a1bb0 (diff)
downloadotp-04c57e50c50d167b65c625d6a9fece8d7b4c7954.tar.gz
otp-04c57e50c50d167b65c625d6a9fece8d7b4c7954.tar.bz2
otp-04c57e50c50d167b65c625d6a9fece8d7b4c7954.zip
erts: Fix sys_driver to correctly deselect fds
Incorrect precidence rules made the driver never deselect the given fds.
Diffstat (limited to 'erts/emulator/sys/unix')
-rw-r--r--erts/emulator/sys/unix/sys_drivers.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/erts/emulator/sys/unix/sys_drivers.c b/erts/emulator/sys/unix/sys_drivers.c
index 042a091db1..664d677ebd 100644
--- a/erts/emulator/sys/unix/sys_drivers.c
+++ b/erts/emulator/sys/unix/sys_drivers.c
@@ -1006,10 +1006,8 @@ static void clear_fd_data(ErtsSysFdData *fdd)
static void nbio_stop_fd(ErlDrvPort prt, ErtsSysFdData *fdd, int use)
{
- driver_select(prt, abs(fdd->fd), use ? ERL_DRV_USE_NO_CALLBACK : 0|DO_READ|DO_WRITE, 0);
clear_fd_data(fdd);
SET_BLOCKING(abs(fdd->fd));
-
}
static void fd_stop(ErlDrvData ev) /* Does not close the fds */
@@ -1026,10 +1024,12 @@ static void fd_stop(ErlDrvData ev) /* Does not close the fds */
if (dd->ifd) {
sz += sizeof(ErtsSysFdData);
+ driver_select(prt, abs(dd->ifd->fd), ERL_DRV_USE_NO_CALLBACK|DO_READ|DO_WRITE, 0);
nbio_stop_fd(prt, dd->ifd, 1);
}
if (dd->ofd && dd->ofd != dd->ifd) {
sz += sizeof(ErtsSysFdData);
+ driver_select(prt, abs(dd->ofd->fd), ERL_DRV_USE_NO_CALLBACK|DO_WRITE, 0);
nbio_stop_fd(prt, dd->ofd, 1);
}