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); -- 2.26.2