28std::once_flag XrdClHttp::VerbsCache::m_expiry_launch;
29std::mutex XrdClHttp::VerbsCache::m_shutdown_lock;
30std::condition_variable XrdClHttp::VerbsCache::m_shutdown_requested_cv;
31bool XrdClHttp::VerbsCache::m_shutdown_requested =
false;
32std::thread XrdClHttp::VerbsCache::m_expire_tid;
35XrdClHttp::VerbsCache::shutdown_s XrdClHttp::VerbsCache::m_shutdowns;
38 std::unique_lock lk(m_shutdown_lock);
39 if (!m_shutdown_requested) {
40 std::call_once(m_expiry_launch, [] {
41 std::thread t(VerbsCache::ExpireThread);
42 m_expire_tid = std::move(t);
48void XrdClHttp::VerbsCache::ExpireThread()
52 std::unique_lock lock(m_shutdown_lock);
53 m_shutdown_requested_cv.wait_for(
55 std::chrono::seconds(30),
56 []{
return m_shutdown_requested;}
58 if (m_shutdown_requested) {
62 auto now = std::chrono::steady_clock::now();
69 std::unique_lock lock(m_mutex);
70 for (
auto iter = m_verbs_map.begin(); iter != m_verbs_map.end();) {
71 if (iter->second.m_expiry < now) {
72 iter = m_verbs_map.erase(iter);
80XrdClHttp::VerbsCache::Shutdown()
83 std::unique_lock lock(m_shutdown_lock);
84 m_shutdown_requested =
true;
85 m_shutdown_requested_cv.notify_one();
88 if (m_expire_tid.joinable()) {
void Expire(std::chrono::steady_clock::time_point now)
static VerbsCache & Instance()