diff options
author | Richard Fitzgerald <rf@opensource.wolfsonmicro.com> | 2013-10-22 11:51:58 +0100 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2013-11-22 11:05:17 -0800 |
commit | ab9b85b430eeef547c6f10496f8e2a904fd38c79 (patch) | |
tree | 1b192aa077560200400b7247f04360befb9f92c4 | |
parent | a85e245a09c028d36cbf04f233be10bc583691f5 (diff) | |
download | tinycompress-ab9b85b430eeef547c6f10496f8e2a904fd38c79.tar.gz |
compress: compress_wait() must return error if timed out
The caller must be certain that a return of 0 really means
that compress is ready for more data, so when poll() returns
0 for a timeout we must report that as an error.
Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r-- | compress.c | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -616,15 +616,17 @@ int compress_wait(struct compress *compress, int timeout_ms) fds.events = POLLOUT | POLLIN; ret = poll(&fds, 1, timeout_ms); - if (fds.revents & POLLERR) { - return oops(compress, EIO, "poll returned error!"); + if (ret > 0) { + if (fds.revents & POLLERR) + return oops(compress, EIO, "poll returned error!"); + if (fds.revents & (POLLOUT | POLLIN)) + return 0; } - /* A pause will cause -EBADFD or zero. */ - if ((ret < 0) && (ret != -EBADFD)) + if (ret == 0) + return oops(compress, ETIME, "poll timed out"); + if (ret < 0) return oops(compress, errno, "poll error"); - if (fds.revents & (POLLOUT | POLLIN)) { - return 0; - } - return ret; + + return oops(compress, EIO, "poll signalled unhandled event"); } |