diff options
author | David Robillard <d@drobilla.net> | 2011-09-24 03:22:30 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-09-24 03:22:30 +0000 |
commit | 74a711e0d1cdb5c505a227dc9b1925657f1e778d (patch) | |
tree | 78f93b26e4154c76892cb0160414c4effbfc730e /src/server/events/Get.cpp | |
parent | 2be10b0b6f2c0f01870208e9d18e5db87e5dfb88 (diff) | |
download | ingen-74a711e0d1cdb5c505a227dc9b1925657f1e778d.tar.gz ingen-74a711e0d1cdb5c505a227dc9b1925657f1e778d.tar.bz2 ingen-74a711e0d1cdb5c505a227dc9b1925657f1e778d.zip |
Use store lock to avoid race conditions with Get and create/delete events.
Get really shouldn't be reading the store (via ObjectSender) in the post
processing thread at all, avoiding that entirely would be a better solution.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3484 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/events/Get.cpp')
-rw-r--r-- | src/server/events/Get.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/server/events/Get.cpp b/src/server/events/Get.cpp index 058f0b63..61fa6ffc 100644 --- a/src/server/events/Get.cpp +++ b/src/server/events/Get.cpp @@ -42,12 +42,15 @@ Get::Get( , _uri(uri) , _object(NULL) , _plugin(NULL) + , _lock(engine.engine_store()->lock(), Glib::NOT_LOCK) { } void Get::pre_process() { + _lock.acquire(); + if (_uri == "ingen:plugins") { _plugins = _engine.node_factory()->plugins(); } else if (Path::is_valid(_uri.str())) { @@ -76,6 +79,8 @@ Get::post_process() } else { _request->respond_error("Unable to find client to send object."); } + + _lock.release(); } } // namespace Server |