diff --git a/src/io.c b/src/io.c index 3b8ebb22624c75c352be683aa9e51b7c2c1e2c76..d75450007b04d4dcd0234860c2f3fd9c4c34fd6e 100644 --- a/src/io.c +++ b/src/io.c @@ -324,8 +324,8 @@ static void write_callback(struct lsh_fd *fd) case EAGAIN: break; case EPIPE: - werror("Broken pipe\n"); - close_fd(fd, CLOSE_WRITE_FAILED); + debug("io.c: Broken pipe.\n"); + close_fd(fd, CLOSE_BROKEN_PIPE); break; default: werror("io.c: write failed, %s\n", strerror(errno)); @@ -649,7 +649,7 @@ static void prepare_write(struct lsh_fd *fd) if (! (fd->want_write = write_buffer_pre_write(self->buffer)) && self->buffer->closed) - kill_fd(fd); + close_fd(fd, CLOSE_EOF); } struct abstract_write *io_read_write(struct io_backend *b, diff --git a/src/io.h b/src/io.h index f53b4b0bdbf0d0a0350a76ad5cf961c699ee920c..3a971fc76143163e9d865683699ef8d703ac6edc 100644 --- a/src/io.h +++ b/src/io.h @@ -50,7 +50,9 @@ /* Close callbacks are called with a reason as argument. */ -/* End of file while reading */ +/* End of file while reading. + * Or when a closed write_buffer has been flushed successfully. */ +/* FIXME: Should we use separate codes for these two events? */ #define CLOSE_EOF 1 /* EPIPE when writing */