From f2f8bf86cc42261dbca55c2484cae9a80672d78b Mon Sep 17 00:00:00 2001 From: Andrey Mironov Date: Fri, 26 Jun 2015 18:45:08 +0300 Subject: [PATCH] dbms: external dictionaries: fix null pointer dereference after calling unique_ptr::release() --- dbms/src/Interpreters/ExternalDictionaries.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dbms/src/Interpreters/ExternalDictionaries.cpp b/dbms/src/Interpreters/ExternalDictionaries.cpp index 2f2d8e2cb3..247c5e99a7 100644 --- a/dbms/src/Interpreters/ExternalDictionaries.cpp +++ b/dbms/src/Interpreters/ExternalDictionaries.cpp @@ -81,6 +81,10 @@ void ExternalDictionaries::reloadImpl(const bool throw_on_error) { const std::lock_guard lock{dictionaries_mutex}; + const auto & lifetime = dict_ptr->getLifetime(); + std::uniform_int_distribution distribution{lifetime.min_sec, lifetime.max_sec}; + update_times[name] = std::chrono::system_clock::now() + std::chrono::seconds{distribution(rnd_engine)}; + const auto dict_it = dictionaries.find(name); if (dict_it->second.dict) dict_it->second.dict->set(dict_ptr.release()); @@ -90,10 +94,6 @@ void ExternalDictionaries::reloadImpl(const bool throw_on_error) /// erase stored exception on success dict_it->second.exception = std::exception_ptr{}; - const auto & lifetime = dict_ptr->getLifetime(); - std::uniform_int_distribution distribution{lifetime.min_sec, lifetime.max_sec}; - update_times[name] = std::chrono::system_clock::now() + std::chrono::seconds{distribution(rnd_engine)}; - recreated_failed_dictionaries.push_back(name); } } -- GitLab