ubus: Correct usage of timeout on poll function
As the man page explains: "Specifying a timeout of zero causes poll() to return immediately, even if no file descriptors are ready." The use of 0 as timeout could cause libubus to busy loop if the socket was non-blocking. For blocking sockets, this was less apparent as the subsequent read() would then block. Signed-off-by: Karl Vogel <karl.vogel@gmail.com>
This commit is contained in:
parent
259450f414
commit
f09d18878b
1 changed files with 2 additions and 2 deletions
|
@ -54,7 +54,7 @@ static void wait_data(int fd, bool write)
|
|||
struct pollfd pfd = { .fd = fd };
|
||||
|
||||
pfd.events = write ? POLLOUT : POLLIN;
|
||||
poll(&pfd, 1, 0);
|
||||
poll(&pfd, 1, -1);
|
||||
}
|
||||
|
||||
static int writev_retry(int fd, struct iovec *iov, int iov_len, int sock_fd)
|
||||
|
@ -321,7 +321,7 @@ void __hidden ubus_poll_data(struct ubus_context *ctx, int timeout)
|
|||
.events = POLLIN | POLLERR,
|
||||
};
|
||||
|
||||
poll(&pfd, 1, timeout);
|
||||
poll(&pfd, 1, timeout ? timeout : -1);
|
||||
ubus_handle_data(&ctx->sock, ULOOP_READ);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue