RefBase: update sp and wp to allow constinit

A constexpr ctor is useful for static initialization.
We also modernize the unit test for static variable best practices.

Test: atest libutils_binder_test
Change-Id: If42c0939fb1a2dcb8eb101ed0e10051f67e2150d
This commit is contained in:
Andy Hung 2024-02-21 17:56:48 -08:00
parent 7cf49320ba
commit 071880f5cb
3 changed files with 6 additions and 6 deletions

View file

@ -300,8 +300,8 @@ private:
std::atomic<int>* mDeleteCount;
};
static sp<Bar> buffer;
static std::atomic<bool> bufferFull(false);
[[clang::no_destroy]] static constinit sp<Bar> buffer;
static constinit std::atomic<bool> bufferFull(false);
// Wait until bufferFull has value val.
static inline void waitFor(bool val) {
@ -380,8 +380,8 @@ TEST(RefBase, RacingDestructors) {
} // Otherwise this is slow and probably pointless on a uniprocessor.
}
static wp<Bar> wpBuffer;
static std::atomic<bool> wpBufferFull(false);
[[clang::no_destroy]] static constinit wp<Bar> wpBuffer;
static constinit std::atomic<bool> wpBufferFull(false);
// Wait until wpBufferFull has value val.
static inline void wpWaitFor(bool val) {

View file

@ -404,7 +404,7 @@ class wp
public:
typedef typename RefBase::weakref_type weakref_type;
inline wp() : m_ptr(nullptr), m_refs(nullptr) { }
inline constexpr wp() : m_ptr(nullptr), m_refs(nullptr) { }
// if nullptr, returns nullptr
//

View file

@ -30,7 +30,7 @@ template<typename T> class wp;
template<typename T>
class sp {
public:
inline sp() : m_ptr(nullptr) { }
inline constexpr sp() : m_ptr(nullptr) { }
// The old way of using sp<> was like this. This is bad because it relies
// on implicit conversion to sp<>, which we would like to remove (if an