diff --git a/src/bthread/eloq_module.cpp b/src/bthread/eloq_module.cpp index 309e457d..71845ead 100644 --- a/src/bthread/eloq_module.cpp +++ b/src/bthread/eloq_module.cpp @@ -44,6 +44,13 @@ namespace eloq { } registered_modules[i] = module; registered_module_cnt.fetch_add(1, std::memory_order_release); + const auto non_null_modules = + std::count_if(registered_modules.begin(), registered_modules.end(), + [](EloqModule *registered_module) { + return registered_module != nullptr; + }); + CHECK_EQ(static_cast(non_null_modules), + registered_module_cnt.load(std::memory_order_acquire)); return 0; } @@ -79,7 +86,15 @@ namespace eloq { registered_modules[i] = registered_modules[i + 1]; i++; } + registered_modules[registered_modules.size() - 1] = nullptr; registered_module_cnt.fetch_sub(1, std::memory_order_release); + const auto non_null_modules = + std::count_if(registered_modules.begin(), registered_modules.end(), + [](EloqModule *registered_module) { + return registered_module != nullptr; + }); + CHECK_EQ(static_cast(non_null_modules), + registered_module_cnt.load(std::memory_order_acquire)); lk.unlock(); while (module->registered_workers_.load(std::memory_order_acquire) != 0) { diff --git a/src/bthread/task_group.cpp b/src/bthread/task_group.cpp index e58d2a4e..3126bfc3 100644 --- a/src/bthread/task_group.cpp +++ b/src/bthread/task_group.cpp @@ -1318,12 +1318,15 @@ bool TaskGroup::HasTasks() { void TaskGroup::CheckAndUpdateModules() { if (modules_cnt_ != registered_module_cnt.load(std::memory_order_acquire)) { std::shared_lock lk(eloq::module_mutex); + const int registered_module_count = + registered_module_cnt.load(std::memory_order_acquire); const auto old_registered_modules = registered_modules_; registered_modules_ = registered_modules; lk.unlock(); const auto new_module_cnt = std::count_if(registered_modules_.begin(), registered_modules_.end(), [](eloq::EloqModule* module) { return module != nullptr; }); + CHECK_EQ(static_cast(new_module_cnt), registered_module_count); // new modules for (auto i = modules_cnt_; i < new_module_cnt; ++i) { registered_modules_[i]->registered_workers_.fetch_add(1, std::memory_order_relaxed);