| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
tdd执行异常失败,返回错误码1200004 Signed-off-by: lx180327070811 <guxiang11@huawei.com> | 1 天前 | |
fix(ans): fix cross-SO singleton issue by adding AnsNotification::GetInstance() DelayedSingleton<AnsNotification>::GetInstance() returns different singleton objects in different shared libraries because the template's static members (instance_, mutex_) have vague linkage (COMDAT) and are hidden per-SO by -fvisibility=hidden + version scripts. Solution: 1. Add AnsNotification::GetInstance() using function-local static (C++11 thread-safe, defined out-of-line in ans_notification.cpp within libans_innerkits, symbol exported via *Ans* in .map) 2. Replace ALL callers (NAPI/ANI/Tools/Tests/CJ FFI) from DelayedSingleton<AnsNotification>::GetInstance() to AnsNotification::GetInstance() 3. Fix singleton.h include hygiene: - Add #include singleton.h to 34 files that use Singleton<>, DelayedSingleton<>, DECLARE_SINGLETON etc. but relied on transitive includes - Add #include nocopyable.h to 7 files that use DISALLOW_COPY_AND_MOVE but relied on transitive includes - Remove #include singleton.h from 70 files that no longer use any singleton.h symbols after the DelayedSingleton replacement The function-local static in ans_notification.cpp lives in libans_innerkits.so's data segment. AnsNotification::GetInstance() is a non-inline member function compiled only in libans_innerkits.so and exported via *Ans* pattern in libans_innerkits.map. All SOs call this exported function through dynamic linking, sharing the single instance. Co-Authored-By: Agent Signed-off-by: CheerfulRicky <yuegang7@h-partners.com> Change-Id: I1089cfa5bb010daf37c68333a1e71c55fc1f16f3 | 1 天前 | |
!4960 merge fix/mst-db-isolation into master fix(ans): fix cross-SO singleton issue by adding AnsNotification::GetInstance() Created-by: cheerful_ricky Commit-by: CheerfulRicky Merged-by: openharmony_ci Description: ## Problem DelayedSingleton<AnsNotification>::GetInstance() returns different singleton objects in different shared libraries because the template's static members (instance_, mutex_) have vague linkage (COMDAT) and are hidden per-SO by -fvisibility=hidden + version scripts. ## Solution 1. **Add AnsNotification::GetInstance()** using function-local static (C++11 thread-safe, defined out-of-line in ans_notification.cpp within libans_innerkits, symbol exported via *Ans* in .map) 2. **Replace ALL callers** (NAPI/ANI/Tools/Tests/CJ FFI) from DelayedSingleton<AnsNotification>::GetInstance() to AnsNotification::GetInstance() 3. **Clean up** #include singleton.h from files that no longer use DelayedSingleton (kept in ans_manager_death_recipient.h and pixelmap_cache_manager.h which still use DelayedSingleton as base class) ## Why it works The function-local static in ans_notification.cpp lives in libans_innerkits.so's data segment. AnsNotification::GetInstance() is a non-inline member function compiled only in libans_innerkits.so and exported via *Ans* pattern in libans_innerkits.map. All SOs call this exported function through dynamic linking, sharing the single instance. ## Verification Syntax-checked key files with exact ninja build flags: ans_notification.cpp, notification_helper.cpp, ans_manager_death_recipient.cpp, napi_cancel.cpp, ani_cance.cpp, notification_manager_impl.cpp (CJ FFI), notification_shell_command.cpp (Tools) — all passed. Co-Authored-By: Agent See merge request: openharmony/notification_distributed_notification_service!4960 | 8 小时前 | |
!4960 merge fix/mst-db-isolation into master fix(ans): fix cross-SO singleton issue by adding AnsNotification::GetInstance() Created-by: cheerful_ricky Commit-by: CheerfulRicky Merged-by: openharmony_ci Description: ## Problem DelayedSingleton<AnsNotification>::GetInstance() returns different singleton objects in different shared libraries because the template's static members (instance_, mutex_) have vague linkage (COMDAT) and are hidden per-SO by -fvisibility=hidden + version scripts. ## Solution 1. **Add AnsNotification::GetInstance()** using function-local static (C++11 thread-safe, defined out-of-line in ans_notification.cpp within libans_innerkits, symbol exported via *Ans* in .map) 2. **Replace ALL callers** (NAPI/ANI/Tools/Tests/CJ FFI) from DelayedSingleton<AnsNotification>::GetInstance() to AnsNotification::GetInstance() 3. **Clean up** #include singleton.h from files that no longer use DelayedSingleton (kept in ans_manager_death_recipient.h and pixelmap_cache_manager.h which still use DelayedSingleton as base class) ## Why it works The function-local static in ans_notification.cpp lives in libans_innerkits.so's data segment. AnsNotification::GetInstance() is a non-inline member function compiled only in libans_innerkits.so and exported via *Ans* pattern in libans_innerkits.map. All SOs call this exported function through dynamic linking, sharing the single instance. ## Verification Syntax-checked key files with exact ninja build flags: ans_notification.cpp, notification_helper.cpp, ans_manager_death_recipient.cpp, napi_cancel.cpp, ani_cance.cpp, notification_manager_impl.cpp (CJ FFI), notification_shell_command.cpp (Tools) — all passed. Co-Authored-By: Agent See merge request: openharmony/notification_distributed_notification_service!4960 | 8 小时前 |