affinity: lock get next cpu function

The function getting next CPU to use need to be locked as init of
the threads are done concurrently.
remotes/origin/master-1.1.x
Eric Leblond 14 years ago committed by Victor Julien
parent 0b5e5b8772
commit aedb61b7d2

@ -110,6 +110,7 @@ static void AffinitySetupInit()
for (j = 0; j < ncpu; j++) {
CPU_SET(j, cs);
}
SCMutexInit(&thread_affinity[i].taf_mutex, NULL);
}
return;
@ -276,7 +277,10 @@ void AffinitySetupLoadFromConfig()
*/
int AffinityGetNextCPU(ThreadsAffinityType *taf)
{
int ncpu = taf->lcpu;
int ncpu = 0;
SCMutexLock(&taf->taf_mutex);
ncpu = taf->lcpu;
while (!CPU_ISSET(ncpu, &taf->cpu_set)) {
ncpu++;
if (ncpu >= UtilCpuGetNumProcessorsOnline())
@ -285,5 +289,7 @@ int AffinityGetNextCPU(ThreadsAffinityType *taf)
taf->lcpu = ncpu + 1;
if (taf->lcpu >= UtilCpuGetNumProcessorsOnline())
taf->lcpu = 0;
SCMutexUnlock(&taf->taf_mutex);
SCLogInfo("Setting affinity on CPU %d", ncpu);
return ncpu;
}

@ -52,6 +52,7 @@ typedef struct ThreadsAffinityType_ {
cpu_set_t lowprio_cpu;
cpu_set_t medprio_cpu;
cpu_set_t hiprio_cpu;
SCMutex taf_mutex;
uint16_t lcpu; /* use by exclusive mode */
} ThreadsAffinityType;

Loading…
Cancel
Save