diff options
author | Igor Sysoev <igor@sysoev.ru> | 2019-02-28 18:04:11 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2019-02-28 18:04:11 +0300 |
commit | 834e8ca576868c5ecd104bd5ebec9968c7f80a0b (patch) | |
tree | 1574f2532ffd849666e78b6a68fc7a03cfa1eb34 /src/nxt_conn_write.c | |
parent | afda14d1f23cc49eee5939c25278eec3501d8631 (diff) | |
download | unit-834e8ca576868c5ecd104bd5ebec9968c7f80a0b.tar.gz unit-834e8ca576868c5ecd104bd5ebec9968c7f80a0b.tar.bz2 |
Fixed timer and event race condition.
When idle timeout occurs at the same time as a request comes in,
the timer handler closes connection while the read event triggers
request processing, and this eventually leads to segmentation fault.
Diffstat (limited to '')
-rw-r--r-- | src/nxt_conn_write.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/nxt_conn_write.c b/src/nxt_conn_write.c index 80d6f5cf..298d8f75 100644 --- a/src/nxt_conn_write.c +++ b/src/nxt_conn_write.c @@ -22,9 +22,10 @@ nxt_conn_io_write(nxt_task_t *task, void *obj, void *data) c = obj; - nxt_debug(task, "conn write fd:%d", c->socket.fd); + nxt_debug(task, "conn write fd:%d er:%d bl:%d", + c->socket.fd, c->socket.error, c->block_write); - if (c->socket.error != 0) { + if (c->socket.error != 0 || c->block_write) { goto error; } |