diff options
author | David Robillard <d@drobilla.net> | 2011-09-24 04:52:23 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-09-24 04:52:23 +0000 |
commit | 9085d33b7600fd2721f0a2401a4e69830c457f84 (patch) | |
tree | 17631e4c88c8fd9d61045e23e84de5f19c005b7b /src/server/events/SetMetadata.cpp | |
parent | 0e310888809be1b55e6c24081f41f56bebf00f58 (diff) | |
download | ingen-9085d33b7600fd2721f0a2401a4e69830c457f84.tar.gz ingen-9085d33b7600fd2721f0a2401a4e69830c457f84.tar.bz2 ingen-9085d33b7600fd2721f0a2401a4e69830c457f84.zip |
Remove concept of "blocking" events in favour of store RWLock.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3488 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/events/SetMetadata.cpp')
-rw-r--r-- | src/server/events/SetMetadata.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/server/events/SetMetadata.cpp b/src/server/events/SetMetadata.cpp index 1a2d6b17..efa57198 100644 --- a/src/server/events/SetMetadata.cpp +++ b/src/server/events/SetMetadata.cpp @@ -57,7 +57,7 @@ SetMetadata::SetMetadata( const URI& subject, const Properties& properties, const Properties& remove) - : QueuedEvent(engine, request, timestamp, false) + : QueuedEvent(engine, request, timestamp) , _create_event(NULL) , _subject(subject) , _properties(properties) @@ -67,6 +67,7 @@ SetMetadata::SetMetadata( , _compiled_patch(NULL) , _create(create) , _context(context) + , _lock(engine.engine_store()->lock(), Glib::NOT_LOCK) { if (context != Resource::DEFAULT) { Resource::set_context(_properties, context); @@ -102,6 +103,8 @@ SetMetadata::pre_process() const bool is_graph_object = Path::is_path(_subject); + _lock.acquire(); + _object = is_graph_object ? _engine.engine_store()->find_object(Path(_subject.str())) : static_cast<Shared::ResourceImpl*>(_engine.node_factory()->plugin(_subject)); @@ -135,7 +138,6 @@ SetMetadata::pre_process() _create_event = new CreateNode(_engine, sub_request, _time, path, p->second.get_uri(), _properties); } else if (is_port) { - _blocking = bool(_request); _create_event = new CreatePort(_engine, sub_request, _time, path, data_type.uri(), is_output, _properties); } @@ -219,7 +221,6 @@ SetMetadata::pre_process() } else if (key == uris.ingen_polyphony) { if (value.type() == Atom::INT) { op = POLYPHONY; - _blocking = true; _patch->prepare_internal_poly(*_engine.buffer_factory(), value.get_int32()); } else { _error = BAD_VALUE_TYPE; @@ -230,7 +231,6 @@ SetMetadata::pre_process() if (parent) { if (value.type() == Atom::BOOL) { op = POLYPHONIC; - _blocking = true; obj->set_property(key, value.get_bool(), value.context()); NodeImpl* node = dynamic_cast<NodeImpl*>(obj); if (node) @@ -340,9 +340,6 @@ SetMetadata::execute(ProcessContext& context) } QueuedEvent::execute(context); - - if (_blocking) - _request->unblock(); } void @@ -380,6 +377,8 @@ SetMetadata::post_process() % _subject % _error_predicate).str()); break; } + + _lock.release(); } } // namespace Server |