summaryrefslogtreecommitdiff
path: root/nis/nis_callback.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-05-21 22:00:48 +0000
committerJakub Jelinek <jakub@redhat.com>2006-05-21 22:00:48 +0000
commit5a04a4228c17def8ccffb60c932fcfea7fdee7cd (patch)
treec8bbf3d9f67de2e185041c1ccd611d692f858246 /nis/nis_callback.c
parent4cad81b6e72ed99c7816f28ad6828196b2ac7b65 (diff)
Updated to fedora-glibc-20060521T2153cvs/fedora-glibc-2_4_90-9
Diffstat (limited to 'nis/nis_callback.c')
-rw-r--r--nis/nis_callback.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/nis/nis_callback.c b/nis/nis_callback.c
index 6582315c70..7c76f99b6b 100644
--- a/nis/nis_callback.c
+++ b/nis/nis_callback.c
@@ -197,22 +197,18 @@ internal_nis_do_callback (struct dir_binding *bptr, netobj *cookie,
struct nis_cb *cb)
{
struct timeval TIMEOUT = {25, 0};
- bool_t cb_is_running = FALSE;
+ bool_t cb_is_running;
data = cb;
for (;;)
{
- struct pollfd *my_pollfd;
+ struct pollfd my_pollfd[svc_max_pollfd];
int i;
if (svc_max_pollfd == 0 && svc_pollfd == NULL)
return NIS_CBERROR;
- my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);
- if (__builtin_expect (my_pollfd == NULL, 0))
- return NIS_NOMEMORY;
-
for (i = 0; i < svc_max_pollfd; ++i)
{
my_pollfd[i].fd = svc_pollfd[i].fd;
@@ -220,20 +216,17 @@ internal_nis_do_callback (struct dir_binding *bptr, netobj *cookie,
my_pollfd[i].revents = 0;
}
- switch (i = __poll (my_pollfd, svc_max_pollfd, 25*1000))
+ switch (i = TEMP_FAILURE_RETRY (__poll (my_pollfd, svc_max_pollfd,
+ 25*1000)))
{
case -1:
- free (my_pollfd);
- if (errno == EINTR)
- continue;
return NIS_CBERROR;
case 0:
- free (my_pollfd);
/* See if callback 'thread' in the server is still alive. */
- memset ((char *) &cb_is_running, 0, sizeof (cb_is_running));
+ cb_is_running = FALSE;
if (clnt_call (bptr->clnt, NIS_CALLBACK, (xdrproc_t) xdr_netobj,
(caddr_t) cookie, (xdrproc_t) xdr_bool,
- (caddr_t) & cb_is_running, TIMEOUT) != RPC_SUCCESS)
+ (caddr_t) &cb_is_running, TIMEOUT) != RPC_SUCCESS)
cb_is_running = FALSE;
if (cb_is_running == FALSE)
@@ -244,7 +237,6 @@ internal_nis_do_callback (struct dir_binding *bptr, netobj *cookie,
break;
default:
svc_getreq_poll (my_pollfd, i);
- free (my_pollfd);
if (data->nomore)
return data->result;
}