summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-05-10 03:23:11 +0000
committerDavid Robillard <d@drobilla.net>2012-05-10 03:23:11 +0000
commitda468f24388d7f0f574c6e4dd4022e05d47a9db2 (patch)
tree32e90d5fa55a35caef43cb69592286fc31c5d4f4 /src/gui
parent281bbcc6a7208c28283bc9bdd521c5d6cc48a60f (diff)
downloadingen-da468f24388d7f0f574c6e4dd4022e05d47a9db2.tar.gz
ingen-da468f24388d7f0f574c6e4dd4022e05d47a9db2.tar.bz2
ingen-da468f24388d7f0f574c6e4dd4022e05d47a9db2.zip
Use SharedPtr references to Interfaces to keep things sane.
Fix double register when using GUI with a remote engine. Avoid signal when writing to dead socket by using send with MSG_NOSIGNAL. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4336 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/App.cpp2
-rw-r--r--src/gui/ConnectWindow.cpp15
2 files changed, 12 insertions, 5 deletions
diff --git a/src/gui/App.cpp b/src/gui/App.cpp
index 4d108c71..525a5885 100644
--- a/src/gui/App.cpp
+++ b/src/gui/App.cpp
@@ -162,7 +162,7 @@ App::attach(SharedPtr<SigClientInterface> client)
assert(!_loader);
if (_world->local_engine()) {
- _world->local_engine()->register_client(client->uri(), client.get());
+ _world->local_engine()->register_client(client->uri(), client);
}
_client = client;
diff --git a/src/gui/ConnectWindow.cpp b/src/gui/ConnectWindow.cpp
index 4d26e61c..b08efb85 100644
--- a/src/gui/ConnectWindow.cpp
+++ b/src/gui/ConnectWindow.cpp
@@ -157,13 +157,19 @@ ConnectWindow::connect(bool existing)
uri = user_uri;
}
- if (existing)
+ if (existing) {
uri = world->engine()->uri().str();
+ }
- // Create client-side listener
- SharedPtr<ThreadedSigClientInterface> tsci(new ThreadedSigClientInterface(1024));
+ SharedPtr<ThreadedSigClientInterface> tsci;
+ if (world->engine()) {
+ tsci = PtrCast<ThreadedSigClientInterface>(
+ world->engine()->respondee());
+ }
- world->set_engine(world->interface(uri, tsci));
+ if (!tsci) {
+ world->set_engine(world->interface(uri, tsci));
+ }
_app->attach(tsci);
_app->register_callbacks();
@@ -203,6 +209,7 @@ ConnectWindow::connect(bool existing)
SharedPtr<SigClientInterface> client(new SigClientInterface());
+ world->engine()->set_respondee(client);
_app->attach(client);
_app->register_callbacks();