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

Commit 26d24428 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

libutils Condition are now PRIVATE by default

Condition must be initialized with SHARED for the old behavior, where
they can be used accross processes.

Updated the two places android that require SHARED conditions.

PRIVATE conditions (and mutexes) use more efficient syscalls.

Change-Id: I9a281a4b88206e92ac559c66554e886b9c62db3a
parent 2cfdc6be
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -209,7 +209,7 @@ inline thread_id_t getThreadId() {
class Mutex {
public:
    enum {
        NORMAL = 0,
        PRIVATE = 0,
        SHARED = 1
    };
    
@@ -305,7 +305,13 @@ typedef Mutex::Autolock AutoMutex;
 */
class Condition {
public:
    enum {
        PRIVATE = 0,
        SHARED = 1
    };

    Condition();
    Condition(int type);
    ~Condition();
    // Wait on the condition variable.  Lock the mutex before calling.
    status_t wait(Mutex& mutex);
@@ -329,6 +335,17 @@ private:
inline Condition::Condition() {
    pthread_cond_init(&mCond, NULL);
}
inline Condition::Condition(int type) {
    if (type == SHARED) {
        pthread_condattr_t attr;
        pthread_condattr_init(&attr);
        pthread_condattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
        pthread_cond_init(&mCond, &attr);
        pthread_condattr_destroy(&attr);
    } else {
        pthread_cond_init(&mCond, NULL);
    }
}
inline Condition::~Condition() {
    pthread_cond_destroy(&mCond);
}
+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ namespace android {
// ----------------------------------------------------------------------------

SharedClient::SharedClient()
    : lock(Mutex::SHARED)
    : lock(Mutex::SHARED), cv(Condition::SHARED)
{
}