On 7/22/20 1:34 AM, Doug Nazar wrote: > Signed-off-by: Doug Nazar <nazard@xxxxxxxx> > --- > src/svc.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/src/svc.c b/src/svc.c > index 6db164b..57f7ba3 100644 > --- a/src/svc.c > +++ b/src/svc.c > @@ -54,6 +54,7 @@ > #include "rpc_com.h" > > #define RQCRED_SIZE 400 /* this size is excessive */ > +#define SVC_POLLFD_INCREMENT 16 > > #define max(a, b) (a > b ? a : b) > > @@ -107,6 +108,7 @@ xprt_register (xprt) > if (sock < _rpc_dtablesize()) > { > int i; > + size_t size; > struct pollfd *new_svc_pollfd; > > __svc_xports[sock] = xprt; > @@ -126,17 +128,17 @@ xprt_register (xprt) > goto unlock; > } > > - new_svc_pollfd = (struct pollfd *) realloc (svc_pollfd, > - sizeof (struct pollfd) > - * (svc_max_pollfd + 1)); > + size = sizeof (struct pollfd) * (svc_max_pollfd + SVC_POLLFD_INCREMENT); > + new_svc_pollfd = (struct pollfd *) realloc (svc_pollfd, size); > if (new_svc_pollfd == NULL) /* Out of memory */ > goto unlock; > svc_pollfd = new_svc_pollfd; > - ++svc_max_pollfd; > + svc_max_pollfd += SVC_POLLFD_INCREMENT; > > - svc_pollfd[svc_max_pollfd - 1].fd = sock; > - svc_pollfd[svc_max_pollfd - 1].events = (POLLIN | POLLPRI | > - POLLRDNORM | POLLRDBAND); > + svc_pollfd[i].fd = sock; > + svc_pollfd[i].events = (POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND); > + for (++i; i < svc_max_pollfd; ++i) > + svc_pollfd[i].fd = -1; > } > unlock: > rwlock_unlock (&svc_fd_lock); > Just curious as why batch allocations are need? What problem does it solve? steved.