my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);
my_pollfd = (struct pollfd *) alloca (sizeof (struct pollfd) * svc_max_pollfd);
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;  data = cb;  for (;;)    {      struct pollfd *my_pollfd;      int i;      if (svc_max_pollfd == 0 && svc_pollfd == NULL)        return NIS_CBERROR;      my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);      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, 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));	  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)	    cb_is_running = FALSE;	  if (cb_is_running == FALSE)	    {	      syslog (LOG_ERR, "NIS+: callback timed out");	      return NIS_CBERROR;	    }	  break;	default:	  svc_getreq_poll (my_pollfd, i);	  free (my_pollfd);	  if (data->nomore)	    return data->result;	}    }}