diff --git a/daemon/src/sflphone_api.cpp b/daemon/src/sflphone_api.cpp index 0e3405648b79fea54c4cffe9c51562b706d5ecfd..5c49213f7db38eeefae219e310aa925cede9bb32 100644 --- a/daemon/src/sflphone_api.cpp +++ b/daemon/src/sflphone_api.cpp @@ -51,36 +51,30 @@ #include "client/videomanager.h" #endif // SFL_VIDEO -// This manager pointer is only set after proper library initialization. -static ManagerImpl* manager_ = nullptr; - static CallManager* getCallManager() { - return manager_->getClient()->getCallManager(); + return Manager::instance().getClient()->getCallManager(); } static ConfigurationManager* getConfigurationManager() - { - return manager_->getClient()->getConfigurationManager(); - } +{ + return Manager::instance().getClient()->getConfigurationManager(); +} #ifdef SFL_PRESENCE static PresenceManager* getPresenceManager() { - return manager_->getClient()->getPresenceManager(); + return Manager::instance().getClient()->getPresenceManager(); } #endif // SFL_PRESENCE #ifdef SFL_VIDEO static VideoManager* getVideoManager() { - return manager_->getClient()->getVideoManager(); + return Manager::instance().getClient()->getVideoManager(); } #endif // SFL_VIDEO -// User handlers of library events -static sflph_ev_handlers evHandlers_; - const char * sflph_version() { @@ -89,10 +83,9 @@ sflph_version() int sflph_init(sflph_ev_handlers* ev_handlers, enum sflph_init_flag flags) { - // Ignore initialization if already done - if (manager_) { - return 0; - } + // User handlers of library events + // FIXME: static evil + static sflph_ev_handlers evHandlers_; // Copy user event handlers evHandlers_ = *ev_handlers; @@ -103,7 +96,11 @@ int sflph_init(sflph_ev_handlers* ev_handlers, enum sflph_init_flag flags) // Create manager try { - manager_ = &(Manager::instance()); + // FIXME: static evil + static ManagerImpl *manager; + // ensure that we haven't been in this function before + assert(!manager); + manager = &(Manager::instance()); } catch (...) { return -SFLPH_ERR_MANAGER_INIT; } @@ -122,9 +119,8 @@ int sflph_init(sflph_ev_handlers* ev_handlers, enum sflph_init_flag flags) // Initialize manager now try { - manager_->init(""); + Manager::instance().init(""); } catch (...) { - manager_ = nullptr; return -SFLPH_ERR_MANAGER_INIT; } @@ -133,19 +129,13 @@ int sflph_init(sflph_ev_handlers* ev_handlers, enum sflph_init_flag flags) void sflph_fini(void) { - // Ignore if not yet initialized - if (!manager_) { - return; - } - // Finish manager - manager_->finish(); - manager_ = nullptr; + Manager::instance().finish(); } void sflph_poll_events() { - manager_->pollEvents(); + Manager::instance().pollEvents(); } bool sflph_call_place(const std::string& account_id, const std::string& call_id, const std::string& to)