This is an automated email from the ASF dual-hosted git repository. pengzheng pushed a commit to branch hotfix/system-clock-replace in repository https://gitbox.apache.org/repos/asf/celix.git
commit 6e364bb705490256fda6a8bfb273bfaf372d00e3 Author: PengZheng <[email protected]> AuthorDate: Wed Dec 13 17:36:54 2023 +0800 Use std::chrono::steady_clock to handle backward system clock adjustments. --- libs/framework/include/celix/BundleActivator.h | 4 ++-- libs/framework/include/celix/Trackers.h | 4 ++-- libs/framework/include/celix/dm/ServiceDependency_Impl.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/framework/include/celix/BundleActivator.h b/libs/framework/include/celix/BundleActivator.h index 8fffadeb..17e0a3f9 100644 --- a/libs/framework/include/celix/BundleActivator.h +++ b/libs/framework/include/celix/BundleActivator.h @@ -60,9 +60,9 @@ namespace impl { template<typename T> void waitForExpired(long bndId, std::weak_ptr<celix::BundleContext> &weakCtx, const char *name, std::weak_ptr<T> &observe) { - auto start = std::chrono::system_clock::now(); + auto start = std::chrono::steady_clock::now(); while (!observe.expired()) { - auto now = std::chrono::system_clock::now(); + auto now = std::chrono::steady_clock::now(); auto durationInSec = std::chrono::duration_cast<std::chrono::seconds>(now - start); if (durationInSec > std::chrono::seconds{5}) { auto msg = std::string{"Cannot destroy bundle "} + std::to_string(bndId) + ". " + name + diff --git a/libs/framework/include/celix/Trackers.h b/libs/framework/include/celix/Trackers.h index d965ef54..60df7c86 100644 --- a/libs/framework/include/celix/Trackers.h +++ b/libs/framework/include/celix/Trackers.h @@ -424,9 +424,9 @@ namespace celix { template<typename U> void waitForExpired(std::weak_ptr<U> observe, long svcId, const char* objName) { - auto start = std::chrono::system_clock::now(); + auto start = std::chrono::steady_clock::now(); while (!observe.expired()) { - auto now = std::chrono::system_clock::now(); + auto now = std::chrono::steady_clock::now(); auto durationInMilli = std::chrono::duration_cast<std::chrono::milliseconds>(now - start); if (durationInMilli > warningTimoutForNonExpiredSvcObject) { celix_bundleContext_log(cCtx.get(), CELIX_LOG_LEVEL_WARNING, "Cannot remove %s associated with service.id %li, because it is still in use. Current shared_ptr use count is %i\n", objName, svcId, (int)observe.use_count()); diff --git a/libs/framework/include/celix/dm/ServiceDependency_Impl.h b/libs/framework/include/celix/dm/ServiceDependency_Impl.h index 7712bd83..297e81fc 100644 --- a/libs/framework/include/celix/dm/ServiceDependency_Impl.h +++ b/libs/framework/include/celix/dm/ServiceDependency_Impl.h @@ -35,9 +35,9 @@ using namespace celix::dm; template<typename U> inline void BaseServiceDependency::waitForExpired(std::weak_ptr<U> observe, long svcId, const char* observeType) { - auto start = std::chrono::system_clock::now(); + auto start = std::chrono::steady_clock::now(); while (!observe.expired()) { - auto now = std::chrono::system_clock::now(); + auto now = std::chrono::steady_clock::now(); auto durationInMilli = std::chrono::duration_cast<std::chrono::milliseconds>(now - start); if (durationInMilli > warningTimoutForNonExpiredSvcObject) { if (cCmp) {
