Protect shared affinity table with mutex
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 22 Jun 2009 01:33:38 +0000 (21:33 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Mon, 22 Jun 2009 01:33:38 +0000 (21:33 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
test_mutex.c
test_perthreadlock.c
test_qsbr.c
test_qsbr_gc.c
test_rwlock.c
test_urcu_gc.c

index 4cf1d32c29151e54f1aa3dd67461bc4f3e1b8098..e82498070f675ea74330eb2e3d4acf8bddd7cbe5 100644 (file)
@@ -98,22 +98,33 @@ static unsigned int cpu_affinities[NR_CPUS];
 static unsigned int next_aff = 0;
 static int use_affinity = 0;
 
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
        int cpu;
+       int ret;
 
        if (!use_affinity)
                return;
 
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
        cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
 }
 
-
-
 /*
  * returns 0 if test should end.
  */
index 5bbe72b1637af9adbaa099cb4c4631a74a3fc50e..31b7721d631a2ea8e4470029da35d66d3bb89e7f 100644 (file)
@@ -102,22 +102,33 @@ static unsigned int cpu_affinities[NR_CPUS];
 static unsigned int next_aff = 0;
 static int use_affinity = 0;
 
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
        int cpu;
+       int ret;
 
        if (!use_affinity)
                return;
 
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
        cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
 }
 
-
-
 /*
  * returns 0 if test should end.
  */
index af5ccfd58317d06d5c1e2d6c37ac0f268b0c5e16..2617629743e15a80b77da08b33de7cc7206e25f0 100644 (file)
@@ -92,22 +92,33 @@ static unsigned int cpu_affinities[NR_CPUS];
 static unsigned int next_aff = 0;
 static int use_affinity = 0;
 
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
        int cpu;
+       int ret;
 
        if (!use_affinity)
                return;
 
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
        cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
 }
 
-
-
 /*
  * returns 0 if test should end.
  */
index 0b2d5df8ddd8dd13cc36c1b40998f78e2a646322..98094a6c80da23c90d738d9f11d8e29fa6e278bf 100644 (file)
@@ -101,22 +101,33 @@ static unsigned int cpu_affinities[NR_CPUS];
 static unsigned int next_aff = 0;
 static int use_affinity = 0;
 
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
        int cpu;
+       int ret;
 
        if (!use_affinity)
                return;
 
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
        cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
 }
 
-
-
 /*
  * returns 0 if test should end.
  */
index b7909019f8b1df843e25512bad4367d427a1bbfe..4cc4c07f953dc5f1ae4d43ce96fb860bcc3f5f55 100644 (file)
@@ -98,22 +98,33 @@ static unsigned int cpu_affinities[NR_CPUS];
 static unsigned int next_aff = 0;
 static int use_affinity = 0;
 
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
        int cpu;
+       int ret;
 
        if (!use_affinity)
                return;
 
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
        cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
 }
 
-
-
 /*
  * returns 0 if test should end.
  */
index f1cce248a8b604709ffcb9e3a265c1f983bc03f7..66b714ba072f786e1bc519382543e036f03df50a 100644 (file)
@@ -105,22 +105,33 @@ static unsigned int cpu_affinities[NR_CPUS];
 static unsigned int next_aff = 0;
 static int use_affinity = 0;
 
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
        int cpu;
+       int ret;
 
        if (!use_affinity)
                return;
 
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
        cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
        sched_setaffinity(0, sizeof(mask), &mask);
 }
 
-
-
 /*
  * returns 0 if test should end.
  */
This page took 0.028407 seconds and 4 git commands to generate.