summaryrefslogtreecommitdiffstats
path: root/src/gui/ThreadedLoader.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-05-23 03:20:40 +0000
committerDavid Robillard <d@drobilla.net>2015-05-23 03:20:40 +0000
commitdc5c579778d8b7b6f113c48d202f89c172abd591 (patch)
tree7a3a24f7acfab09c652ca466a46099766c8a02d3 /src/gui/ThreadedLoader.cpp
parent63d4ffa098e016a9680b4b1b1f209ab3bb3dbd8c (diff)
downloadingen-dc5c579778d8b7b6f113c48d202f89c172abd591.tar.gz
ingen-dc5c579778d8b7b6f113c48d202f89c172abd591.tar.bz2
ingen-dc5c579778d8b7b6f113c48d202f89c172abd591.zip
Prevent concurrent Sord access.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5683 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui/ThreadedLoader.cpp')
-rw-r--r--src/gui/ThreadedLoader.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/gui/ThreadedLoader.cpp b/src/gui/ThreadedLoader.cpp
index 8b7797cb..98314b66 100644
--- a/src/gui/ThreadedLoader.cpp
+++ b/src/gui/ThreadedLoader.cpp
@@ -77,8 +77,6 @@ ThreadedLoader::load_graph(bool merge,
{
_mutex.lock();
- Ingen::World* world = _app.world();
-
Glib::ustring engine_base = "";
if (engine_parent) {
if (merge)
@@ -89,10 +87,7 @@ ThreadedLoader::load_graph(bool merge,
_events.push_back(
sigc::hide_return(
- sigc::bind(sigc::mem_fun(world->parser().get(),
- &Ingen::Parser::parse_file),
- _app.world(),
- _app.world()->interface().get(),
+ sigc::bind(sigc::mem_fun(this, &ThreadedLoader::load_graph_event),
document_uri,
engine_parent,
engine_symbol,
@@ -103,6 +98,22 @@ ThreadedLoader::load_graph(bool merge,
}
void
+ThreadedLoader::load_graph_event(const Glib::ustring& document_uri,
+ optional<Raul::Path> engine_parent,
+ optional<Raul::Symbol> engine_symbol,
+ optional<Node::Properties> engine_data)
+{
+ std::lock_guard<std::mutex> lock(_app.world()->rdf_mutex());
+
+ _app.world()->parser()->parse_file(_app.world(),
+ _app.world()->interface().get(),
+ document_uri,
+ engine_parent,
+ engine_symbol,
+ engine_data);
+}
+
+void
ThreadedLoader::save_graph(SPtr<const Client::GraphModel> model,
const string& filename)
{
@@ -122,6 +133,8 @@ ThreadedLoader::save_graph_event(SPtr<const Client::GraphModel> model,
const string& filename)
{
if (_app.serialiser()) {
+ std::lock_guard<std::mutex> lock(_app.world()->rdf_mutex());
+
if (filename.find(".ingen") != string::npos) {
_app.serialiser()->write_bundle(model, filename);
} else {