From: Kinkie Date: Sun, 29 Jun 2008 19:55:48 +0000 (+0200) Subject: Refactored CacheManager class into a singleton. X-Git-Tag: SQUID_3_1_0_1~49^2~143^2~53^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=26ca2b51d5e811e7b181a2870de0360c18fbdff3;p=thirdparty%2Fsquid.git Refactored CacheManager class into a singleton. --- diff --git a/src/CacheManager.h b/src/CacheManager.h index efc687c08a..9014188584 100644 --- a/src/CacheManager.h +++ b/src/CacheManager.h @@ -77,7 +77,6 @@ class CacheManager { public: - CacheManager(); /* the holy trinity - assignment, copy cons, destructor */ /* unimplemented - prevents bugs from synthetic */ CacheManager & operator = (CacheManager &); @@ -88,6 +87,16 @@ public: virtual void registerAction(char const * action, char const * desc, OBJH * handler, int pw_req_flag, int atomic); virtual CacheManagerAction * findAction(char const * action); + + static CacheManager* GetInstance(); + +protected: + CacheManager(); + +private: + static CacheManager* instance; + + }; #endif /* SQUID_CACHEMANAGER_H */ diff --git a/src/cache_manager.cc b/src/cache_manager.cc index 00f5b38e9a..6273088a4f 100644 --- a/src/cache_manager.cc +++ b/src/cache_manager.cc @@ -435,3 +435,13 @@ cachemgrPasswdGet(cachemgr_passwd * a, const char *action) return NULL; } + +CacheManager* CacheManager::instance=0; + +CacheManager* +CacheManager::GetInstance() { + if (instance == 0) + instance = new CacheManager; + return instance; +} + diff --git a/src/main.cc b/src/main.cc index 006a9e6e98..84418f348f 100644 --- a/src/main.cc +++ b/src/main.cc @@ -127,7 +127,7 @@ static void SquidShutdown(void); static void mainSetCwd(void); static int checkRunningPid(void); -static CacheManager manager; +static CacheManager *manager=CacheManager::GetInstance(); #ifndef _SQUID_MSWIN_ static const char *squid_start_script = "squid_start"; @@ -693,7 +693,7 @@ mainReconfigure(void) refererCloseLog(); errorClean(); enter_suid(); /* root to read config file */ - parseConfigFile(ConfigFile, manager); + parseConfigFile(ConfigFile, *manager); setUmask(Config.umask); Mem::Report(); setEffectiveUser(); @@ -730,7 +730,7 @@ mainReconfigure(void) serverConnectionsOpen(); neighbors_init(); - neighborsRegisterWithCacheManager(manager); + neighborsRegisterWithCacheManager(*manager); storeDirOpenSwapLogs(); @@ -966,76 +966,76 @@ mainInitialize(void) FwdState::initModule(); /* register the modules in the cache manager menus */ - accessLogRegisterWithCacheManager(manager); - asnRegisterWithCacheManager(manager); - authenticateRegisterWithCacheManager(&Config.authConfiguration, manager); + accessLogRegisterWithCacheManager(*manager); + asnRegisterWithCacheManager(*manager); + authenticateRegisterWithCacheManager(&Config.authConfiguration, *manager); #if USE_CARP - carpRegisterWithCacheManager(manager); + carpRegisterWithCacheManager(*manager); #endif - cbdataRegisterWithCacheManager(manager); + cbdataRegisterWithCacheManager(*manager); /* These use separate calls so that the comm loops can eventually * coexist. */ #ifdef USE_EPOLL - commEPollRegisterWithCacheManager(manager); + commEPollRegisterWithCacheManager(*manager); #endif #ifdef USE_KQUEUE - commKQueueRegisterWithCacheManager(manager); + commKQueueRegisterWithCacheManager(*manager); #endif #ifdef USE_POLL - commPollRegisterWithCacheManager(manager); + commPollRegisterWithCacheManager(*manager); #endif #if defined(USE_SELECT) || defined(USE_SELECT_WIN32) - commSelectRegisterWithCacheManager(manager); + commSelectRegisterWithCacheManager(*manager); #endif - clientdbRegisterWithCacheManager(manager); + clientdbRegisterWithCacheManager(*manager); #if DELAY_POOLS - DelayPools::RegisterWithCacheManager(manager); + DelayPools::RegisterWithCacheManager(*manager); #endif - DiskIOModule::RegisterAllModulesWithCacheManager(manager); + DiskIOModule::RegisterAllModulesWithCacheManager(*manager); #if USE_DNSSERVERS - dnsRegisterWithCacheManager(manager); + dnsRegisterWithCacheManager(*manager); #endif - eventInit(manager); - externalAclRegisterWithCacheManager(manager); - fqdncacheRegisterWithCacheManager(manager); - FwdState::RegisterWithCacheManager(manager); - httpHeaderRegisterWithCacheManager(manager); + eventInit(*manager); + externalAclRegisterWithCacheManager(*manager); + fqdncacheRegisterWithCacheManager(*manager); + FwdState::RegisterWithCacheManager(*manager); + httpHeaderRegisterWithCacheManager(*manager); #if !USE_DNSSERVERS - idnsRegisterWithCacheManager(manager); + idnsRegisterWithCacheManager(*manager); #endif - ipcacheRegisterWithCacheManager(manager); - Mem::RegisterWithCacheManager(manager); - netdbRegisterWitHCacheManager(manager); - PconnModule::GetInstance()->registerWithCacheManager(manager); - redirectRegisterWithCacheManager(manager); - refreshRegisterWithCacheManager(manager); - statRegisterWithCacheManager(manager); - storeDigestRegisterWithCacheManager(manager); - StoreFileSystem::RegisterAllFsWithCacheManager(manager); - storeRegisterWithCacheManager(manager); - storeLogRegisterWithCacheManager(manager); + ipcacheRegisterWithCacheManager(*manager); + Mem::RegisterWithCacheManager(*manager); + netdbRegisterWitHCacheManager(*manager); + PconnModule::GetInstance()->registerWithCacheManager(*manager); + redirectRegisterWithCacheManager(*manager); + refreshRegisterWithCacheManager(*manager); + statRegisterWithCacheManager(*manager); + storeDigestRegisterWithCacheManager(*manager); + StoreFileSystem::RegisterAllFsWithCacheManager(*manager); + storeRegisterWithCacheManager(*manager); + storeLogRegisterWithCacheManager(*manager); #if DEBUGSTRINGS - StringRegistry::Instance().registerWithCacheManager(manager); + StringRegistry::Instance().registerWithCacheManager(*manager); #endif #if USE_XPROF_STATS - xprofRegisterWithCacheManager(manager); + xprofRegisterWithCacheManager(*manager); #endif } @@ -1054,7 +1054,7 @@ mainInitialize(void) neighbors_init(); - neighborsRegisterWithCacheManager(manager); + neighborsRegisterWithCacheManager(*manager); if (Config.chroot_dir) no_suid(); @@ -1262,7 +1262,7 @@ main(int argc, char **argv) /* we may want the parsing process to set this up in the future */ Store::Root(new StoreController); - parse_err = parseConfigFile(ConfigFile, manager); + parse_err = parseConfigFile(ConfigFile, *manager); Mem::Report();