From b96e5fd8481f79935967fed56c71f72d16c59f6b Mon Sep 17 00:00:00 2001 From: Max Romanov Date: Mon, 25 Mar 2019 14:49:28 +0300 Subject: Turning off port read event state after main process fork. Master port stores two file descriptors and works as a read port on the master process side. After a fork, the port switches into write mode and the read socket closes, but the same event structure is used for the write socket. However, the inherited structure remained in read state, telling the epoll engine to use MOD operation instead of ADD. The patch resets read event state, so the engine may write using proper ADD operation. --- src/nxt_port_socket.c | 1 + test/test_configuration.py | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/nxt_port_socket.c b/src/nxt_port_socket.c index a426df31..c9b5105b 100644 --- a/src/nxt_port_socket.c +++ b/src/nxt_port_socket.c @@ -566,6 +566,7 @@ void nxt_port_read_close(nxt_port_t *port) { port->socket.read_ready = 0; + port->socket.read = NXT_EVENT_INACTIVE; nxt_socket_close(port->socket.task, port->pair[0]); port->pair[0] = -1; } diff --git a/test/test_configuration.py b/test/test_configuration.py index de20ac25..20c5fc8b 100644 --- a/test/test_configuration.py +++ b/test/test_configuration.py @@ -216,9 +216,7 @@ class TestUnitConfiguration(unit.TestUnitControl): } }), 'no port') - @unittest.expectedFailure def test_json_application_name_large(self): - self.skip_alerts.append(r'epoll_ctl.+failed') name = "X" * 1024 * 1024 self.assertIn('success', self.conf({ -- cgit