From 2d9b427a5b20dcec3d2212a3a8a47c29b4acdd46 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 11 Mar 2019 10:14:37 -0700 Subject: [PATCH] ldp: fix worker alloc when using eventfds Change-Id: Icfba7ae9cbf504a8966923eac06c9eb0e11899d2 Signed-off-by: Florin Coras --- src/vcl/ldp.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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; -- 2.16.6