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.
remotes/origin/master-1.1.x
Eric Leblond 14 years ago committed by Victor Julien
parent e5cc68a91f
commit d34e85c203

@ -281,14 +281,20 @@ void AffinitySetupLoadFromConfig()
int AffinityGetNextCPU(ThreadsAffinityType *taf) int AffinityGetNextCPU(ThreadsAffinityType *taf)
{ {
int ncpu = 0; int ncpu = 0;
int iter = 0;
#if !defined OS_WIN32 && !defined __OpenBSD__ #if !defined OS_WIN32 && !defined __OpenBSD__
SCMutexLock(&taf->taf_mutex); SCMutexLock(&taf->taf_mutex);
ncpu = taf->lcpu; ncpu = taf->lcpu;
while (!CPU_ISSET(ncpu, &taf->cpu_set)) { while (!CPU_ISSET(ncpu, &taf->cpu_set) && iter < 2) {
ncpu++; ncpu++;
if (ncpu >= UtilCpuGetNumProcessorsOnline()) if (ncpu >= UtilCpuGetNumProcessorsOnline()) {
ncpu = 0; 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; taf->lcpu = ncpu + 1;
if (taf->lcpu >= UtilCpuGetNumProcessorsOnline()) if (taf->lcpu >= UtilCpuGetNumProcessorsOnline())

Loading…
Cancel
Save