summaryrefslogtreecommitdiff
path: root/sunrpc/svc_run.c
diff options
context:
space:
mode:
Diffstat (limited to 'sunrpc/svc_run.c')
-rw-r--r--sunrpc/svc_run.c38
1 files changed, 14 insertions, 24 deletions
diff --git a/sunrpc/svc_run.c b/sunrpc/svc_run.c
index f1f47fbf30..d5e24dd0fc 100644
--- a/sunrpc/svc_run.c
+++ b/sunrpc/svc_run.c
@@ -51,52 +51,42 @@ void
svc_run (void)
{
int i;
- struct pollfd *my_pollfd = NULL;
- int last_max_pollfd = 0;
for (;;)
{
- int max_pollfd = svc_max_pollfd;
- if (max_pollfd == 0 && svc_pollfd == NULL)
- break;
+ struct pollfd *my_pollfd;
- if (last_max_pollfd != max_pollfd)
- {
- struct pollfd *new_pollfd
- = realloc (my_pollfd, sizeof (struct pollfd) * max_pollfd);
-
- if (new_pollfd == NULL)
- {
- perror (_("svc_run: - out of memory"));
- break;
- }
+ if (svc_max_pollfd == 0 && svc_pollfd == NULL)
+ return;
- my_pollfd = new_pollfd;
- last_max_pollfd = max_pollfd;
+ my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);
+ if (my_pollfd == NULL)
+ {
+ perror (_("svc_run: - out of memory"));
+ return;
}
- for (i = 0; i < max_pollfd; ++i)
+ for (i = 0; i < svc_max_pollfd; ++i)
{
my_pollfd[i].fd = svc_pollfd[i].fd;
my_pollfd[i].events = svc_pollfd[i].events;
my_pollfd[i].revents = 0;
}
- switch (i = __poll (my_pollfd, max_pollfd, -1))
+ switch (i = __poll (my_pollfd, svc_max_pollfd, -1))
{
case -1:
+ free (my_pollfd);
if (errno == EINTR)
continue;
perror (_("svc_run: - poll failed"));
- break;
+ return;
case 0:
+ free (my_pollfd);
continue;
default:
INTUSE(svc_getreq_poll) (my_pollfd, i);
- continue;
+ free (my_pollfd);
}
- break;
}
-
- free (my_pollfd);
}