diff --git a/src/lua/bsdsocket.cc b/src/lua/bsdsocket.cc index f506998b9cb67ac38c12d308f6a43d5aa034601d..570faca546a4ef036afc00a238777adbfd2f1afc 100644 --- a/src/lua/bsdsocket.cc +++ b/src/lua/bsdsocket.cc @@ -427,7 +427,9 @@ lbox_bsdsocket_iowait(struct lua_State *L) ev_set_priority(&io, EV_MAXPRI); ev_io_start(&io); + fiber_setcancellable(true); fiber_yield_timeout(timeout); + fiber_setcancellable(false); ev_io_stop(&io); int ret = 0; diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua index 9a9ac7ef3333b1c9d38067d1f86a678877108a12..628705ca51ec9e99f16628b93489cc9e86e235ca 100644 --- a/src/lua/bsdsocket.lua +++ b/src/lua/bsdsocket.lua @@ -180,6 +180,7 @@ local function wait_safely(self, what, timeout) self.waiters[fid] = f local res = box.socket.internal.iowait(self.fh, what, timeout) self.waiters[fid] = nil + box.fiber.testcancel() return res end diff --git a/test/box/bsdsocket.result b/test/box/bsdsocket.result index ad78ab5db49a8516defc4938f68475bf47ef49a0..aff05e6d658b3b98293ea2597cfe4e37b4d216ad 100644 --- a/test/box/bsdsocket.result +++ b/test/box/bsdsocket.result @@ -219,7 +219,7 @@ lua s:getsockopt('SOL_SOCKET', 'SO_DEBUG') ... lua s:setsockopt('SOL_SOCKET', 'SO_ACCEPTCONN', 1) --- -error: '[string "-- bsdsocket.lua (internal file)..."]:321: Socket option SO_ACCEPTCONN is read only' +error: '[string "-- bsdsocket.lua (internal file)..."]:322: Socket option SO_ACCEPTCONN is read only' ... lua s:getsockopt('SOL_SOCKET', 'SO_RCVBUF') > 32 ---