diff --git a/src/common/guifacade.cpp b/src/common/guifacade.cpp index 6efdfb9f3..c95e069a1 100644 --- a/src/common/guifacade.cpp +++ b/src/common/guifacade.cpp @@ -44,6 +44,7 @@ namespace gui { using lumiera::InstanceHandle; using util::dispatchSequenced; using lib::Sync; + using lib::RecursiveLock_NoWait; @@ -82,7 +83,7 @@ namespace gui { class GuiSubsysDescriptor : public lumiera::Subsys, - public Sync<> + public Sync { operator string () const { return "Lumiera GTK GUI"; } diff --git a/src/common/instancehandle.hpp b/src/common/instancehandle.hpp index 26dd084be..78a46cbce 100644 --- a/src/common/instancehandle.hpp +++ b/src/common/instancehandle.hpp @@ -58,6 +58,13 @@ namespace lumiera { // using boost::scoped_ptr; namespace { // implementation details + + void + throwIfError() + { + if (lumiera_error_peek()) + throw lumiera::error::Config("failed to open interface or plugin.",lumiera_error()); + } /** takes a bunch of instance definitions, as typically created * when defining interfaces for external use, and registers them @@ -69,6 +76,7 @@ namespace lumiera { { if (!descriptors) return NULL; lumiera_interfaceregistry_bulkregister_interfaces (descriptors, NULL); + throwIfError(); LumieraInterface masterI = descriptors[0]; return lumiera_interface_open (masterI->interface, masterI->version, @@ -122,7 +130,9 @@ namespace lumiera { : desc_(0), instance_(reinterpret_cast (lumiera_interface_open (iName.c_str(), version, minminor, impName.c_str()))) - { } + { + throwIfError(); + } /** Set up an InstanceHandle managing the * registration and deregistration of interface(s). @@ -133,7 +143,9 @@ namespace lumiera { InstanceHandle (LumieraInterface* descriptors) : desc_(descriptors), instance_(reinterpret_cast (register_and_open (desc_))) - { } + { + throwIfError(); + } ~InstanceHandle () { diff --git a/src/gui/guistart.cpp b/src/gui/guistart.cpp index 6060073ac..360cba90f 100644 --- a/src/gui/guistart.cpp +++ b/src/gui/guistart.cpp @@ -83,7 +83,7 @@ namespace gui { << " but actually nothing happens!!!!!!!!!!!!!!\n\n"; terminationHandle(0); // signal immediate shutdown without error - return true; + return false; } };