X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Fmain-block.c;h=dab3c8e68883a5d698e2dcb19782abd3a1a1c6e4;hb=623185a65b8870abb82cd0dd8547a1aa4fc1f535;hp=7363c2c3690e41e43271756d2eb80cf69aa54173;hpb=afcc58361781c05d66fe37ea2bccd53edf8f7aa5;p=libucw.git diff --git a/ucw/main-block.c b/ucw/main-block.c index 7363c2c3..dab3c8e6 100644 --- a/ucw/main-block.c +++ b/ucw/main-block.c @@ -1,13 +1,13 @@ /* * UCW Library -- Main Loop: Block I/O * - * (c) 2004--2010 Martin Mares + * (c) 2004--2011 Martin Mares * * This software may be freely distributed and used according to the terms * of the GNU Lesser General Public License. */ -#define LOCAL_DEBUG +#undef LOCAL_DEBUG #include "ucw/lib.h" #include "ucw/mainloop.h" @@ -24,7 +24,7 @@ block_io_timer_expired(struct main_timer *tm) struct main_block_io *bio = tm->data; timer_del(&bio->timer); if (bio->error_handler) - bio->error_handler(bio, MFERR_TIMEOUT); + bio->error_handler(bio, BIO_ERR_TIMEOUT); } void @@ -55,8 +55,8 @@ block_io_read_handler(struct main_file *fi) if (l < 0) { if (errno != EINTR && errno != EAGAIN && bio->error_handler) - bio->error_handler(bio, MFERR_READ); - return 0; + bio->error_handler(bio, BIO_ERR_READ); + return HOOK_IDLE; } else if (!l) break; @@ -66,7 +66,7 @@ block_io_read_handler(struct main_file *fi) fi->read_handler = NULL; file_chg(fi); bio->read_done(bio); - return 1; + return HOOK_RETRY; } static int @@ -81,8 +81,8 @@ block_io_write_handler(struct main_file *fi) if (l < 0) { if (errno != EINTR && errno != EAGAIN && bio->error_handler) - bio->error_handler(bio, MFERR_WRITE); - return 0; + bio->error_handler(bio, BIO_ERR_WRITE); + return HOOK_IDLE; } bio->wpos += l; } @@ -90,7 +90,7 @@ block_io_write_handler(struct main_file *fi) fi->write_handler = NULL; file_chg(fi); bio->write_done(bio); - return 1; + return HOOK_RETRY; } void @@ -132,3 +132,12 @@ block_io_write(struct main_block_io *bio, void *buf, uns len) } file_chg(&bio->file); } + +void +block_io_set_timeout(struct main_block_io *bio, timestamp_t expires_delta) +{ + if (!expires_delta) + timer_del(&bio->timer); + else + timer_add_rel(&bio->timer, expires_delta); +}