Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 071880f5 authored by Andy Hung's avatar Andy Hung
Browse files

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
parent 7cf49320
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -300,8 +300,8 @@ private:
    std::atomic<int>* mDeleteCount;
    std::atomic<int>* mDeleteCount;
};
};


static sp<Bar> buffer;
[[clang::no_destroy]] static constinit sp<Bar> buffer;
static std::atomic<bool> bufferFull(false);
static constinit std::atomic<bool> bufferFull(false);


// Wait until bufferFull has value val.
// Wait until bufferFull has value val.
static inline void waitFor(bool val) {
static inline void waitFor(bool val) {
@@ -380,8 +380,8 @@ TEST(RefBase, RacingDestructors) {
    }  // Otherwise this is slow and probably pointless on a uniprocessor.
    }  // Otherwise this is slow and probably pointless on a uniprocessor.
}
}


static wp<Bar> wpBuffer;
[[clang::no_destroy]] static constinit wp<Bar> wpBuffer;
static std::atomic<bool> wpBufferFull(false);
static constinit std::atomic<bool> wpBufferFull(false);


// Wait until wpBufferFull has value val.
// Wait until wpBufferFull has value val.
static inline void wpWaitFor(bool val) {
static inline void wpWaitFor(bool val) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -404,7 +404,7 @@ class wp
public:
public:
    typedef typename RefBase::weakref_type weakref_type;
    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
    // if nullptr, returns nullptr
    //
    //
+1 −1
Original line number Original line Diff line number Diff line
@@ -30,7 +30,7 @@ template<typename T> class wp;
template<typename T>
template<typename T>
class sp {
class sp {
public:
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
    // 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
    // on implicit conversion to sp<>, which we would like to remove (if an