Browse Source

Fix previous commit

tags/1.9.7
falkTX 9 years ago
parent
commit
7ffb46ffdf
2 changed files with 28 additions and 24 deletions
  1. +27
    -23
      source/utils/CarlaMutex.hpp
  2. +1
    -1
      source/utils/CarlaThread.hpp

+ 27
- 23
source/utils/CarlaMutex.hpp View File

@@ -201,20 +201,21 @@ public:
*/ */
CarlaSignal() noexcept CarlaSignal() noexcept
: fCondition(), : fCondition(),
fMutex()
fMutex(),
fTriggered(false)
{ {
pthread_mutexattr_t mattr;
pthread_mutexattr_init(&mattr);
pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&fMutex, &mattr);
pthread_mutexattr_destroy(&mattr);

pthread_condattr_t cattr; pthread_condattr_t cattr;
pthread_condattr_init(&cattr); pthread_condattr_init(&cattr);
pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_PRIVATE); pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_PRIVATE);
pthread_cond_init(&fCondition, &cattr); pthread_cond_init(&fCondition, &cattr);
pthread_condattr_destroy(&cattr); pthread_condattr_destroy(&cattr);

pthread_mutexattr_t mattr;
pthread_mutexattr_init(&mattr);
pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_NORMAL);
pthread_mutex_init(&fMutex, &mattr);
pthread_mutexattr_destroy(&mattr);
} }


/* /*
@@ -223,45 +224,48 @@ public:
~CarlaSignal() noexcept ~CarlaSignal() noexcept
{ {
pthread_cond_destroy(&fCondition); pthread_cond_destroy(&fCondition);
pthread_mutex_destroy(&fMutex);
} }


/* /*
* Wait for a broadcast.
* Wait for a signal.
*/ */
void wait() noexcept void wait() noexcept
{ {
pthread_mutex_lock(&fMutex); pthread_mutex_lock(&fMutex);


try {
pthread_cond_wait(&fCondition, &fMutex);
} CARLA_SAFE_EXCEPTION("pthread_cond_wait");
while (! fTriggered)
{
try {
pthread_cond_wait(&fCondition, &fMutex);
} CARLA_SAFE_EXCEPTION("pthread_cond_wait");
}


pthread_mutex_unlock(&fMutex);
}
fTriggered = false;


/*
* Wake up one waiting thread.
*/
void signal() noexcept
{
pthread_mutex_lock(&fMutex);
pthread_cond_signal(&fCondition);
pthread_mutex_unlock(&fMutex); pthread_mutex_unlock(&fMutex);
} }


/* /*
* Wake up all waiting threads. * Wake up all waiting threads.
*/ */
void broadcast() noexcept
void signal() noexcept
{ {
pthread_mutex_lock(&fMutex); pthread_mutex_lock(&fMutex);
pthread_cond_broadcast(&fCondition);

if (! fTriggered)
{
fTriggered = true;
pthread_cond_broadcast(&fCondition);
}

pthread_mutex_unlock(&fMutex); pthread_mutex_unlock(&fMutex);
} }


private: private:
pthread_cond_t fCondition; pthread_cond_t fCondition;
pthread_mutex_t fMutex; pthread_mutex_t fMutex;
volatile bool fTriggered;


CARLA_PREVENT_HEAP_ALLOCATION CARLA_PREVENT_HEAP_ALLOCATION
CARLA_DECLARE_NON_COPY_CLASS(CarlaSignal) CARLA_DECLARE_NON_COPY_CLASS(CarlaSignal)


+ 1
- 1
source/utils/CarlaThread.hpp View File

@@ -260,7 +260,7 @@ private:
setCurrentThreadName(fName); setCurrentThreadName(fName);


// report ready // report ready
fSignal.broadcast();
fSignal.signal();


try { try {
run(); run();


Loading…
Cancel
Save