Files
CheerfulRicky dfb21d3fcf 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
2026-08-07 18:43:39 +08:00
..