Fixed deadlock in pause enable/disable
[mirrors/Programs.git] / c / pthread_extra / test_pause.c
index b99c388c735cc3ac0579fcace9f6cfa815a4df7f..c12de5a36bc614ff960c862601706593dc7e1b12 100644 (file)
@@ -1,3 +1,5 @@
+#define PTHREAD_FREEWHEEL
+
 #include <signal.h>
 #include <pthread.h>
 #include <pthread_extra.h>
@@ -6,6 +8,8 @@
 #include <assert.h>
 #include <unistd.h>
 
+//#define printf(...) (0)
+
 pthread_t main_thread;
 
 void *thread_test(void *arg) {
@@ -50,20 +54,35 @@ int main() {
        while(1) {
                pthread_pause(b);
                pthread_unpause(a);
+               pthread_pause_disable();
+               pthread_pause_disable();
+               pthread_pause_disable();
                printf("SWITCH A:\n");
+               pthread_pause_enable();
+               pthread_pause_enable();
+               pthread_pause_enable();
                pthread_sleep(2);
 
+               pthread_pause_all();
                printf("SWITCH B:\n");
+               pthread_unpause_all();
                pthread_pause(a);
                pthread_unpause(b);
                pthread_sleep(2);
 
+               //pthread_pause_disable();
+               pthread_pause_all();
                printf("SWITCH A+B:\n");
+               pthread_unpause_all();
+               //pthread_pause_enable();
                pthread_unpause(a);
                pthread_unpause(b);
                pthread_sleep(1);
 
+               //pthread_pause_disable();
+               pthread_pause_all();
                printf("SWITCH MAIN ONLY:\n");
+               //pthread_pause_enable();
                pthread_pause_all();
                //printf("\n");
                pthread_sleep(1);
This page took 0.160082 seconds and 4 git commands to generate.