diff --git a/base/Makefile.am b/base/Makefile.am index 3113fbc85..6a0e01c00 100644 --- a/base/Makefile.am +++ b/base/Makefile.am @@ -15,6 +15,7 @@ libbase_la_SOURCES = \ confighive.h \ configobject.cpp \ configobject.h \ + cxx11-compat.h \ delegate.h \ event.h \ exception.cpp \ diff --git a/base/application.cpp b/base/application.cpp index 3e63ebc2e..01840c581 100644 --- a/base/application.cpp +++ b/base/application.cpp @@ -17,6 +17,9 @@ Application::Application(void) lt_dlinit(); #endif /* _WIN32 */ + char *debugging = getenv("_DEBUG"); + m_Debugging = (debugging && strtol(debugging, NULL, 10) != 0); + m_ShuttingDown = false; m_ConfigHive = make_shared(); } @@ -30,6 +33,8 @@ Application::~Application(void) i->second->Stop(); } + m_Components.clear(); + #ifdef _WIN32 WSACleanup(); #else /* _WIN32 */ @@ -349,3 +354,8 @@ void Application::AddComponentSearchDir(const string& componentDirectory) lt_dladdsearchdir(componentDirectory.c_str()); #endif /* _WIN32 */ } + +bool Application::IsDebugging(void) const +{ + return m_Debugging; +} diff --git a/base/application.h b/base/application.h index b532a5d4d..406cc8f6c 100644 --- a/base/application.h +++ b/base/application.h @@ -13,6 +13,7 @@ private: ConfigHive::Ptr m_ConfigHive; map< string, shared_ptr > m_Components; vector m_Arguments; + bool m_Debugging; public: typedef shared_ptr Ptr; @@ -42,6 +43,8 @@ public: void AddComponentSearchDir(const string& componentDirectory); const string& GetExeDirectory(void); + + bool IsDebugging(void) const; }; template @@ -58,32 +61,32 @@ int application_main(int argc, char **argv) Application::Instance->SetArguments(args); -#ifndef _DEBUG - try { -#endif /* !_DEBUG */ + if (Application::Instance->IsDebugging()) { result = Application::Instance->Main(args); -#ifndef _DEBUG - } catch (const Exception& ex) { - cout << "---" << endl; + } else { + try { + result = Application::Instance->Main(args); + } catch (const Exception& ex) { + cout << "---" << endl; - string klass = typeid(ex).name(); + string klass = typeid(ex).name(); -#ifdef HAVE_GCC_ABI_DEMANGLE - int status; - char *realname = abi::__cxa_demangle(klass.c_str(), 0, 0, &status); + #ifdef HAVE_GCC_ABI_DEMANGLE + int status; + char *realname = abi::__cxa_demangle(klass.c_str(), 0, 0, &status); - if (realname != NULL) { - klass = string(realname); - free(realname); + if (realname != NULL) { + klass = string(realname); + free(realname); + } + #endif /* HAVE_GCC_ABI_DEMANGLE */ + + cout << "Exception: " << klass << endl; + cout << "Message: " << ex.GetMessage() << endl; + + return EXIT_FAILURE; } -#endif /* HAVE_GCC_ABI_DEMANGLE */ - - cout << "Exception: " << klass << endl; - cout << "Message: " << ex.GetMessage() << endl; - - return EXIT_FAILURE; } -#endif /* !_DEBUG */ Application::Instance.reset(); diff --git a/jsonrpc/connectionmanager.cpp b/jsonrpc/connectionmanager.cpp index c4a8566f3..6f4f53bf2 100644 --- a/jsonrpc/connectionmanager.cpp +++ b/jsonrpc/connectionmanager.cpp @@ -71,7 +71,8 @@ void ConnectionManager::RegisterMethod(string method, function callback) { - m_Methods[method] -= callback; + // TODO: implement + //m_Methods[method] -= callback; } void ConnectionManager::SendMessage(JsonRpcMessage::Ptr message)