Commit 1507b171 authored by Kevin Wolf's avatar Kevin Wolf

kernel2: Fixes für Pipes

! kernel2: Wenn das schreibende Ende einer Pipe geschlossen wird, muss
  auf dem lesenden Ende auch EOF signalisiert werden

! kernel2: Wenn es von der Pipe im Moment nichts mehr zu lesen gibt,
  dann ist das kein ungültiger Aufruf, sondern nur -EAGAIN
Signed-off-by: Kevin Wolf's avatarKevin Wolf <kevin@tyndur.org>
parent 1c67ff5e
......@@ -61,8 +61,10 @@ static int pipe_read(struct lio_resource* res, uint64_t offset, size_t bytes,
struct pipehandle* ph = res->opaque;
BUG_ON(res->size != ph->bufsize);
if (offset >= res->size) {
if (offset > res->size) {
return -EINVAL;
} else if (offset == res->size) {
return -EAGAIN;
}
bytes = MIN(bytes, res->size - offset);
......@@ -129,6 +131,8 @@ void lio_destroy_pipe(struct lio_resource* res)
void pipe_close(struct lio_stream* s)
{
s->res_write->moredata = false;
if (s->res_read->ref == 0) {
lio_destroy_pipe(s->res_read);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment