From: Amos Jeffries Date: Wed, 9 Sep 2015 14:03:19 +0000 (-0700) Subject: Pass event name from Cache() creator functions X-Git-Tag: SQUID_4_0_1~21^2~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=455bb54dde448829e1db02d55c9b3557351149e6;p=thirdparty%2Fsquid.git Pass event name from Cache() creator functions We cannot use any kind of smart storage in the CredentialsCache class because that would now result in the c-strign being deallocated when there is potentially an event still existing and using it. It cannot be dynamically created and deleted because ownership is split between event and the cache itself. Neither is in a good position to control a dynamic strings lifetime. So make it a goblal const char*. --- diff --git a/src/auth/CredentialsCache.cc b/src/auth/CredentialsCache.cc index 70c08fdf23..17d8c6ba3e 100644 --- a/src/auth/CredentialsCache.cc +++ b/src/auth/CredentialsCache.cc @@ -57,12 +57,11 @@ private: CBDATA_CLASS_INIT(CredentialsCache); -CredentialsCache::CredentialsCache(const char *name) : +CredentialsCache::CredentialsCache(const char *name, const char * const prettyEvName) : gcScheduled_(false), - cacheCleanupEventName("User cache cleanup: ") + cacheCleanupEventName(prettyEvName) { debugs(29, 5, "initializing " << name << " username cache"); - cacheCleanupEventName.append(name); RegisterRunner(new Auth::CredentialCacheRr(name, this)); } @@ -135,7 +134,7 @@ CredentialsCache::scheduleCleanup() { if (!gcScheduled_ && store_.size()) { gcScheduled_ = true; - eventAdd(cacheCleanupEventName.c_str(), &CredentialsCache::Cleanup, + eventAdd(cacheCleanupEventName, &CredentialsCache::Cleanup, this, ::Config.authenticateGCInterval, 1); } } diff --git a/src/auth/CredentialsCache.h b/src/auth/CredentialsCache.h index a428876e96..9c91f6afc5 100644 --- a/src/auth/CredentialsCache.h +++ b/src/auth/CredentialsCache.h @@ -27,7 +27,7 @@ private: typedef std::unordered_map StoreType; public: - explicit CredentialsCache(const char *name); + explicit CredentialsCache(const char *name, const char * const eventName); ~CredentialsCache() = default; CredentialsCache(const CredentialsCache&) = delete; @@ -73,10 +73,8 @@ private: StoreType store_; - // c_str() raw pointer is used in event. std::string must not reallocate - // after ctor and until shutdown - // must be unique - std::string cacheCleanupEventName; + // c-string raw pointer used as event name + const char * const cacheCleanupEventName; }; } /* namespace Auth */ diff --git a/src/auth/basic/User.cc b/src/auth/basic/User.cc index 9c732a254d..4a3749a9b0 100644 --- a/src/auth/basic/User.cc +++ b/src/auth/basic/User.cc @@ -83,7 +83,7 @@ Auth::Basic::User::updateCached(Auth::Basic::User *from) CbcPointer Auth::Basic::User::Cache() { - static CbcPointer p(new Auth::CredentialsCache("basic")); + static CbcPointer p(new Auth::CredentialsCache("basic", "GC Basic user credentials")); return p; } diff --git a/src/auth/digest/User.cc b/src/auth/digest/User.cc index 81788f10fb..9e4a430801 100644 --- a/src/auth/digest/User.cc +++ b/src/auth/digest/User.cc @@ -76,7 +76,7 @@ Auth::Digest::User::currentNonce() CbcPointer Auth::Digest::User::Cache() { - static CbcPointer p(new Auth::CredentialsCache("digest")); + static CbcPointer p(new Auth::CredentialsCache("digest","GC Digest user credentials")); return p; } diff --git a/src/auth/negotiate/User.cc b/src/auth/negotiate/User.cc index 3a264d86c9..56d15475f7 100644 --- a/src/auth/negotiate/User.cc +++ b/src/auth/negotiate/User.cc @@ -31,7 +31,7 @@ Auth::Negotiate::User::ttl() const CbcPointer Auth::Negotiate::User::Cache() { - static CbcPointer p(new Auth::CredentialsCache("negotiate")); + static CbcPointer p(new Auth::CredentialsCache("negotiate", "GC Negotiate user credentials")); return p; } diff --git a/src/auth/ntlm/User.cc b/src/auth/ntlm/User.cc index bd03c96b87..f613737684 100644 --- a/src/auth/ntlm/User.cc +++ b/src/auth/ntlm/User.cc @@ -31,7 +31,7 @@ Auth::Ntlm::User::ttl() const CbcPointer Auth::Ntlm::User::Cache() { - static CbcPointer p(new Auth::CredentialsCache("ntlm")); + static CbcPointer p(new Auth::CredentialsCache("ntlm", "GC NTLM user credentials")); return p; }