X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fmutex.C;h=6ac188d5e2c7222f1d3af68c02430ff2c6cfeba1;hp=a4a6e21f99f605c1e30fe7a7ffb6092cad5ab40b;hb=5621db270ccbeabc106e0f438941dba6f930652b;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd diff --git a/cinelerra-5.1/guicast/mutex.C b/cinelerra-5.1/guicast/mutex.C index a4a6e21f..6ac188d5 100644 --- a/cinelerra-5.1/guicast/mutex.C +++ b/cinelerra-5.1/guicast/mutex.C @@ -20,17 +20,17 @@ */ #include +#include #include -#ifndef NO_GUICAST #include "bcsignals.h" -#endif #include "mutex.h" Mutex::Mutex(const char *title, int recursive) { this->title = title; + this->trace = 0; pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutex_init(&mutex, &attr); @@ -45,9 +45,7 @@ Mutex::~Mutex() { pthread_mutex_destroy(&mutex); pthread_mutex_destroy(&recursive_lock); -#ifndef NO_GUICAST UNSET_ALL_LOCKS(this); -#endif } int Mutex::lock(const char *location) @@ -66,9 +64,7 @@ int Mutex::lock(const char *location) } -#ifndef NO_GUICAST SET_LOCK(this, title, location); -#endif if(pthread_mutex_lock(&mutex)) perror("Mutex::lock"); @@ -88,14 +84,16 @@ int Mutex::lock(const char *location) } -#ifndef NO_GUICAST SET_LOCK2 -#endif return 0; } int Mutex::unlock() { + if( count <= 0 ) { + printf("Mutex::unlock not locked: %s\n", title); + return 0; + } // Remove from recursive status if(recursive) { @@ -116,11 +114,10 @@ int Mutex::unlock() count = 0; -#ifndef NO_GUICAST UNSET_LOCK(this); -#endif - if(pthread_mutex_unlock(&mutex)) perror("Mutex::unlock"); + int ret = pthread_mutex_unlock(&mutex); + if( ret ) fprintf(stderr, "Mutex::unlock: %s\n",strerror(ret)); return 0; } @@ -141,10 +138,8 @@ int Mutex::trylock(const char *location) else count = 1; -#ifndef NO_GUICAST SET_LOCK(this, title, location); SET_LOCK2 -#endif return 0; } @@ -159,11 +154,10 @@ int Mutex::reset() pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutex_init(&mutex, &attr); + UNSET_ALL_LOCKS(this) + trace = 0; count = 0; thread_id = 0; thread_id_valid = 0; -#ifndef NO_GUICAST - UNSET_ALL_LOCKS(this) -#endif return 0; }