diff --git a/src/io.c b/src/io.c index 25fb8ea94a132fbb315d12b858e0b653ebe768fa..3212499b20eb76fc9a6e8b1a7714e709f5e794ad 100644 --- a/src/io.c +++ b/src/io.c @@ -53,6 +53,8 @@ static int do_read(struct abstract_read **r, UINT32 length, UINT8 *buffer) struct fd_read *closure = (struct fd_read *) *r; + MDEBUG(closure); + while(1) { int res = read(closure->fd, buffer, length); @@ -205,8 +207,8 @@ static int io_iter(struct io_backend *b) break; } - else if (!res) - fatal("What now?"); + // else if (!res) + // fatal("What now?"); else fd->buffer->start += res; } @@ -221,7 +223,7 @@ static int io_iter(struct io_backend *b) && (fds[i].revents & POLLIN)) { struct fd_read r = - { { do_read }, fd->fd }; + { { STATIC_HEADER do_read }, fd->fd }; /* The handler function may install a new handler */ if (!READ_HANDLER(fd->handler, @@ -474,10 +476,14 @@ struct abstract_write *io_read_write(struct io_backend *b, f->fd = fd; f->please_close = 0; - + + /* Reading */ f->handler = read_callback; - f->close_callback = close_callback; + f->on_hold = 0; + + /* Writing */ f->buffer = buffer; + f->close_callback = close_callback; f->next = b->io; b->io = f;