X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_in.c;h=26ab3581f96955f77f38fbdd9ea334bf6ed1aafa;hb=e82c34c2f7ac3fbb23ab14cbee8df2dd9178f5a4;hp=212dc9a6e43431330383feee16ca10f22ccad6dd;hpb=fa452cc9b2bb69fa0603dfd97e00e540b6b52840;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_in.c b/src/xcb_in.c index 212dc9a..26ab358 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -30,12 +30,16 @@ #include #include #include -#include #include #include "xcb.h" #include "xcbext.h" #include "xcbint.h" +#if USE_POLL +#include +#else +#include +#endif #define XCB_ERROR 0 #define XCB_REPLY 1 @@ -268,12 +272,22 @@ static int read_block(const int fd, void *buf, const ssize_t len) done += ret; if(ret < 0 && errno == EAGAIN) { +#if USE_POLL + struct pollfd pfd; + pfd.fd = fd; + pfd.events = POLLIN; + pfd.revents = 0; + do { + ret = poll(&pfd, 1, -1); + } while (ret == -1 && errno == EINTR); +#else fd_set fds; FD_ZERO(&fds); FD_SET(fd, &fds); do { ret = select(fd + 1, &fds, 0, 0, 0); } while (ret == -1 && errno == EINTR); +#endif } if(ret <= 0) return ret;