[SCM] calf/master: Do not stall entire JACK system while adding/removing plugins.
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:40:30 UTC 2013
The following commit has been merged in the master branch:
commit 6639b1f2a06145e694d24c5d1c385d75a30966bc
Author: Krzysztof Foltman <wdev at foltman.com>
Date: Sun Dec 26 21:09:40 2010 +0000
Do not stall entire JACK system while adding/removing plugins.
diff --git a/src/calf/utils.h b/src/calf/utils.h
index 3dd83de..783a98a 100644
--- a/src/calf/utils.h
+++ b/src/calf/utils.h
@@ -65,16 +65,22 @@ public:
}
};
-/// Exception-safe mutex lock
-class ptlock
+class ptlock_base
{
+protected:
ptmutex &mutex;
bool locked;
+
+ ptlock_base(ptmutex &_m)
+ : mutex(_m)
+ , locked(false)
+ {
+ }
public:
- ptlock(ptmutex &_m) : mutex(_m), locked(true)
+ bool is_locked()
{
- mutex.lock();
+ return locked;
}
void unlock()
{
@@ -85,13 +91,33 @@ public:
{
locked = false;
}
- ~ptlock()
+ ~ptlock_base()
{
if (locked)
mutex.unlock();
}
};
+/// Exception-safe mutex lock
+class ptlock: public ptlock_base
+{
+public:
+ ptlock(ptmutex &_m) : ptlock_base(_m)
+ {
+ locked = mutex.lock();
+ }
+};
+
+/// Exception-safe polling mutex lock
+class pttrylock: public ptlock_base
+{
+public:
+ pttrylock(ptmutex &_m) : ptlock_base(_m)
+ {
+ locked = mutex.trylock();
+ }
+};
+
/// Exception-safe temporary assignment
template<class T, class Tref = T&>
class scope_assign
diff --git a/src/jack_client.cpp b/src/jack_client.cpp
index 65719d3..010e69a 100644
--- a/src/jack_client.cpp
+++ b/src/jack_client.cpp
@@ -96,9 +96,12 @@ const char **jack_client::get_ports(const char *name_re, const char *type_re, un
int jack_client::do_jack_process(jack_nframes_t nframes, void *p)
{
jack_client *self = (jack_client *)p;
- ptlock lock(self->mutex);
- for(unsigned int i = 0; i < self->plugins.size(); i++)
- self->plugins[i]->process(nframes);
+ pttrylock lock(self->mutex);
+ if (lock.is_locked())
+ {
+ for(unsigned int i = 0; i < self->plugins.size(); i++)
+ self->plugins[i]->process(nframes);
+ }
return 0;
}
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list