From: Amos Jeffries Date: Tue, 8 Sep 2015 15:45:28 +0000 (-0700) Subject: de-duplicate event scheduling X-Git-Tag: SQUID_4_0_1~21^2~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=15094d790563bde9a8c957d633cc3238080432ab;p=thirdparty%2Fsquid.git de-duplicate event scheduling --- diff --git a/src/auth/CredentialsCache.cc b/src/auth/CredentialsCache.cc index fcc60ba76f..685f5e102c 100644 --- a/src/auth/CredentialsCache.cc +++ b/src/auth/CredentialsCache.cc @@ -21,13 +21,12 @@ namespace Auth { CBDATA_CLASS_INIT(CredentialsCache); CredentialsCache::CredentialsCache(const char *name) : + gcScheduled_(false), cachename(name), cacheCleanupEventName("User cache cleanup: ") { debugs(29, 5, "initializing " << name << " username cache"); cacheCleanupEventName.append(name); - eventAdd(cacheCleanupEventName.c_str(), &CredentialsCache::Cleanup, - this, ::Config.authenticateGCInterval, 1); RegisterRunner(this); } @@ -67,8 +66,7 @@ CredentialsCache::cleanup() ++i; } } - eventAdd(cacheCleanupEventName.c_str(), &CredentialsCache::Cleanup, - this, ::Config.authenticateGCInterval, 1); + scheduleCleanup(); } void @@ -76,6 +74,7 @@ CredentialsCache::insert(Auth::User::Pointer anAuth_user) { debugs(29, 6, "adding " << anAuth_user->userKey()); store_[anAuth_user->userKey()] = anAuth_user; + scheduleCleanup(); } // generates the list of cached usernames in a format that is convenient @@ -95,6 +94,16 @@ CredentialsCache::sortedUsersList() const return rv; } +void +CredentialsCache::scheduleCleanup() +{ + if (!gcScheduled_ && store_.size()) { + gcScheduled_ = true; + eventAdd(cacheCleanupEventName.c_str(), &CredentialsCache::Cleanup, + this, ::Config.authenticateGCInterval, 1); + } +} + void CredentialsCache::endingShutdown() { diff --git a/src/auth/CredentialsCache.h b/src/auth/CredentialsCache.h index a9797475e2..793c202c75 100644 --- a/src/auth/CredentialsCache.h +++ b/src/auth/CredentialsCache.h @@ -67,6 +67,11 @@ public: virtual void syncConfig() override; private: + void scheduleCleanup(); + + /// whether a GC event has been scheduled + bool gcScheduled_; + StoreType store_; // for logs, events etc.