From 15094d790563bde9a8c957d633cc3238080432ab Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Tue, 8 Sep 2015 08:45:28 -0700 Subject: [PATCH] de-duplicate event scheduling --- src/auth/CredentialsCache.cc | 17 +++++++++++++---- src/auth/CredentialsCache.h | 5 +++++ 2 files changed, 18 insertions(+), 4 deletions(-) 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. -- 2.47.3