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
|
static inline int
|
||||||
mm_call_is_aborted(mm_call_t *call)
|
mm_call_is_aborted(mm_call_t *call)
|
||||||
{
|
{
|
||||||
return call->status != 0;
|
return call->active && call->status != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
|
|
@ -123,9 +123,12 @@ mm_readahead_cb(mm_fd_t *handle)
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
io->readahead_status = errno;
|
io->readahead_status = errno;
|
||||||
call->status = errno;
|
|
||||||
if (call->fiber)
|
if (mm_call_is_active(call)) {
|
||||||
mm_scheduler_wakeup(call->fiber);
|
call->status = errno;
|
||||||
|
if (call->fiber)
|
||||||
|
mm_scheduler_wakeup(call->fiber);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
io->readahead_pos += rc;
|
io->readahead_pos += rc;
|
||||||
|
@ -136,14 +139,16 @@ mm_readahead_cb(mm_fd_t *handle)
|
||||||
mm_readahead_stop(io);
|
mm_readahead_stop(io);
|
||||||
io->read_eof = 1;
|
io->read_eof = 1;
|
||||||
io->readahead_status = 0;
|
io->readahead_status = 0;
|
||||||
call->status = 0;
|
if (mm_call_is_active(call))
|
||||||
|
call->status = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
io->readahead_status = 0;
|
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;
|
int ra_left = io->readahead_pos - io->readahead_pos_read;
|
||||||
if (io->read_eof || ra_left >= io->read_size)
|
if (io->read_eof || ra_left >= io->read_size)
|
||||||
mm_scheduler_wakeup(call->fiber);
|
mm_scheduler_wakeup(call->fiber);
|
||||||
|
|
Loading…
Reference in New Issue