mirror of https://github.com/yandex/odyssey.git
machinarium: fix readahead callback read status
This commit is contained in:
parent
ee52bd22d7
commit
ac30023f1e
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue