From 2b0057c2cb4f05005354008044049fc3dc2bd1fd Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 7 Feb 2011 16:59:38 +0100 Subject: s3: Eliminate select from packet_fd_read_sync --- source3/include/packet.h | 3 +-- source3/lib/ctdbd_conn.c | 11 +++++------ source3/lib/packet.c | 21 ++++++++++----------- 3 files changed, 16 insertions(+), 19 deletions(-) (limited to 'source3') diff --git a/source3/include/packet.h b/source3/include/packet.h index a77a1a7cbc..c96a8017f8 100644 --- a/source3/include/packet.h +++ b/source3/include/packet.h @@ -38,8 +38,7 @@ NTSTATUS packet_fd_read(struct packet_context *ctx); /* * Sync read, wait for the next chunk */ -NTSTATUS packet_fd_read_sync(struct packet_context *ctx, - struct timeval *timeout); +NTSTATUS packet_fd_read_sync(struct packet_context *ctx, int timeout); /* * Handle an incoming packet: diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c index bad5285026..cfe241e644 100644 --- a/source3/lib/ctdbd_conn.c +++ b/source3/lib/ctdbd_conn.c @@ -331,13 +331,12 @@ static struct messaging_rec *ctdb_pull_messaging_rec(TALLOC_CTX *mem_ctx, static NTSTATUS ctdb_packet_fd_read_sync(struct packet_context *ctx) { - struct timeval timeout; - struct timeval *ptimeout; + int timeout = lp_ctdb_timeout(); - timeout = timeval_set(lp_ctdb_timeout(), 0); - ptimeout = (timeout.tv_sec != 0) ? &timeout : NULL; - - return packet_fd_read_sync(ctx, ptimeout); + if (timeout == 0) { + timeout = -1; + } + return packet_fd_read_sync(ctx, timeout); } /* diff --git a/source3/lib/packet.c b/source3/lib/packet.c index 1abf35c51a..cce23db551 100644 --- a/source3/lib/packet.c +++ b/source3/lib/packet.c @@ -19,6 +19,7 @@ #include "includes.h" #include "../lib/util/select.h" +#include "system/select.h" struct packet_context { int fd; @@ -102,26 +103,24 @@ NTSTATUS packet_fd_read(struct packet_context *ctx) return NT_STATUS_OK; } -NTSTATUS packet_fd_read_sync(struct packet_context *ctx, - struct timeval *timeout) +NTSTATUS packet_fd_read_sync(struct packet_context *ctx, int timeout) { - int res; - fd_set r_fds; - - FD_ZERO(&r_fds); - FD_SET(ctx->fd, &r_fds); - - res = sys_select(ctx->fd+1, &r_fds, NULL, NULL, timeout); + int res, revents; + res = poll_one_fd(ctx->fd, POLLIN|POLLHUP, timeout, &revents); if (res == 0) { - DEBUG(10, ("select timed out\n")); + DEBUG(10, ("poll timed out\n")); return NT_STATUS_IO_TIMEOUT; } if (res == -1) { - DEBUG(10, ("select returned %s\n", strerror(errno))); + DEBUG(10, ("poll returned %s\n", strerror(errno))); return map_nt_error_from_unix(errno); } + if ((revents & (POLLIN|POLLHUP|POLLERR)) == 0) { + DEBUG(10, ("socket not readable\n")); + return NT_STATUS_IO_TIMEOUT; + } return packet_fd_read(ctx); } -- cgit