From d34e85c20390a2f8804d1b2a1a170626788fb78e Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Fri, 17 Jun 2011 23:25:05 +0200 Subject: [PATCH] Fix #290: avoid looping when affinity is invalid This patch adds a loop counter to detect when the cpu_set does not intersect the set of available CPUs. --- src/util-affinity.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/util-affinity.c b/src/util-affinity.c index 28c72ab9a2..b29e271358 100644 --- a/src/util-affinity.c +++ b/src/util-affinity.c @@ -281,14 +281,20 @@ void AffinitySetupLoadFromConfig() int AffinityGetNextCPU(ThreadsAffinityType *taf) { int ncpu = 0; + int iter = 0; #if !defined OS_WIN32 && !defined __OpenBSD__ SCMutexLock(&taf->taf_mutex); ncpu = taf->lcpu; - while (!CPU_ISSET(ncpu, &taf->cpu_set)) { + while (!CPU_ISSET(ncpu, &taf->cpu_set) && iter < 2) { ncpu++; - if (ncpu >= UtilCpuGetNumProcessorsOnline()) + if (ncpu >= UtilCpuGetNumProcessorsOnline()) { ncpu = 0; + iter++; + } + } + if (iter == 2) { + SCLogError(SC_ERR_INVALID_ARGUMENT, "cpu_set does not contains available cpus, cpu afinity conf is invalid"); } taf->lcpu = ncpu + 1; if (taf->lcpu >= UtilCpuGetNumProcessorsOnline())