summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2016-03-04 13:41:39 -0500
committerAdam Midvidy <amidvidy@gmail.com>2016-03-04 15:27:08 -0500
commit703c1f823eea9df285ed0fd2d167730664490286 (patch)
treef0ef40a98ee9a229cbf4d51833b7ea6c6ac049a4
parent8dd3f43ef314c25efbec3003046c0d93d6e9075b (diff)
downloadmongo-703c1f823eea9df285ed0fd2d167730664490286.tar.gz
SERVER-22967 ensure UserCacheInvalidator stops before we destroy its state
-rw-r--r--src/mongo/db/auth/user_cache_invalidator_job.cpp6
-rw-r--r--src/mongo/db/auth/user_cache_invalidator_job.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/src/mongo/db/auth/user_cache_invalidator_job.cpp b/src/mongo/db/auth/user_cache_invalidator_job.cpp
index a62b69370e2..9d8bf0ad3ca 100644
--- a/src/mongo/db/auth/user_cache_invalidator_job.cpp
+++ b/src/mongo/db/auth/user_cache_invalidator_job.cpp
@@ -110,6 +110,12 @@ StatusWith<OID> getCurrentCacheGeneration(OperationContext* txn) {
UserCacheInvalidator::UserCacheInvalidator(AuthorizationManager* authzManager)
: _authzManager(authzManager) {}
+UserCacheInvalidator::~UserCacheInvalidator() {
+ invariant(inShutdown());
+ // Wait to stop running.
+ wait();
+}
+
void UserCacheInvalidator::initialize(OperationContext* txn) {
StatusWith<OID> currentGeneration = getCurrentCacheGeneration(txn);
if (currentGeneration.isOK()) {
diff --git a/src/mongo/db/auth/user_cache_invalidator_job.h b/src/mongo/db/auth/user_cache_invalidator_job.h
index 3b1c2544939..e32c7f662a3 100644
--- a/src/mongo/db/auth/user_cache_invalidator_job.h
+++ b/src/mongo/db/auth/user_cache_invalidator_job.h
@@ -44,6 +44,7 @@ class OperationContext;
class UserCacheInvalidator : public BackgroundJob {
public:
UserCacheInvalidator(AuthorizationManager* authzManager);
+ ~UserCacheInvalidator();
void initialize(OperationContext* txn);