From: Florin Coras Date: Mon, 11 Mar 2019 17:14:37 +0000 (-0700) Subject: ldp: fix worker alloc when using eventfds X-Git-Tag: v19.04-rc1~254 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=2d9b427a5b20dcec3d2212a3a8a47c29b4acdd46 ldp: fix worker alloc when using eventfds Change-Id: Icfba7ae9cbf504a8966923eac06c9eb0e11899d2 Signed-off-by: Florin Coras --- diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c index 2468bcc4750..338c091754b 100644 --- a/src/vcl/ldp.c +++ b/src/vcl/ldp.c @@ -161,6 +161,14 @@ ldp_fd_to_vlsh (int fd) return (fd - ldp->vlsh_bit_val); } +static void +ldp_alloc_workers (void) +{ + if (ldp->workers) + return; + pool_alloc (ldp->workers, LDP_MAX_NWORKERS); +} + static inline int ldp_init (void) { @@ -184,7 +192,7 @@ ldp_init (void) return rv; } ldp->vcl_needs_real_epoll = 0; - pool_alloc (ldp->workers, LDP_MAX_NWORKERS); + ldp_alloc_workers (); ldpw = ldp_worker_get_current (); char *env_var_str = getenv (LDP_ENV_DEBUG); @@ -2040,6 +2048,12 @@ epoll_create1 (int flags) if (ldp->vcl_needs_real_epoll) { + /* Make sure workers have been allocated */ + if (!ldp->workers) + { + ldp_alloc_workers (); + ldpw = ldp_worker_get_current (); + } rv = libc_epoll_create1 (flags); ldp->vcl_needs_real_epoll = 0; ldpw->vcl_mq_epfd = rv;