From ac30023f1edbc24d1cc10d6b2d3a3fb5c591bd3d Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Fri, 21 Apr 2017 14:52:16 +0300 Subject: [PATCH] machinarium: fix readahead callback read status --- src/mm_call.h | 2 +- src/mm_read.c | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/mm_call.h b/src/mm_call.h index 5cc52858..c11e60d5 100644 --- a/src/mm_call.h +++ b/src/mm_call.h @@ -33,7 +33,7 @@ mm_call_is_active(mm_call_t *call) static inline int mm_call_is_aborted(mm_call_t *call) { - return call->status != 0; + return call->active && call->status != 0; } static inline void diff --git a/src/mm_read.c b/src/mm_read.c index eccdaaec..83827b01 100644 --- a/src/mm_read.c +++ b/src/mm_read.c @@ -123,9 +123,12 @@ mm_readahead_cb(mm_fd_t *handle) if (errno == EINTR) continue; io->readahead_status = errno; - call->status = errno; - if (call->fiber) - mm_scheduler_wakeup(call->fiber); + + if (mm_call_is_active(call)) { + call->status = errno; + if (call->fiber) + mm_scheduler_wakeup(call->fiber); + } return; } io->readahead_pos += rc; @@ -136,14 +139,16 @@ mm_readahead_cb(mm_fd_t *handle) mm_readahead_stop(io); io->read_eof = 1; io->readahead_status = 0; - call->status = 0; + if (mm_call_is_active(call)) + call->status = 0; break; } break; } io->readahead_status = 0; - call->status = 0; - if (call->fiber) { + + if (mm_call_is_active(call)) { + call->status = 0; int ra_left = io->readahead_pos - io->readahead_pos_read; if (io->read_eof || ra_left >= io->read_size) mm_scheduler_wakeup(call->fiber);