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

Commit 14bd287d authored by Mathias Agopian's avatar Mathias Agopian Committed by Android Git Automerger
Browse files

am 12d2cdcd: Merge change 24642 into eclair

Merge commit '12d2cdcdb0eed759b0e7738cbdefaa726a71930b' into eclair-plus-aosp

* commit '12d2cdcdb0eed759b0e7738cbdefaa726a71930b':
  make sure conditions will return when the status of a surface is not NO_ERROR
parents de54b060 997161b0
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -93,12 +93,12 @@ public:
    volatile int32_t available; // number of dequeue-able buffers
    volatile int32_t queued;    // number of buffers waiting for post
    volatile int32_t inUse;     // buffer currently in use by SF
    volatile status_t status;   // surface's status code

    // not part of the conditions
    volatile int32_t reallocMask;

    int32_t     identity;       // surface's identity (const)
    status_t    status;         // surface's status code
    int32_t     reserved32[13];
    FlatRegion  dirtyRegion[NUM_BUFFER_MAX];    // 12*4=48 bytes
};
@@ -168,10 +168,11 @@ protected:
template <typename T>
status_t SharedBufferBase::waitForCondition(T condition) 
{
    const SharedBufferStack& stack( *mSharedStack );
    SharedClient& client( *mSharedClient );
    const nsecs_t TIMEOUT = s2ns(1); 
    Mutex::Autolock _l(client.lock);
    while (!condition()) {
    while ((condition()==false) && (stack.status == NO_ERROR)) {
        status_t err = client.cv.waitRelative(client.lock, TIMEOUT);
        
        // handle errors and timeouts
@@ -195,7 +196,7 @@ status_t SharedBufferBase::waitForCondition(T condition)
            }
        }
    }
    return NO_ERROR;
    return stack.status;
}


@@ -265,6 +266,7 @@ public:

    ssize_t retireAndLock();
    status_t unlock(int buffer);
    void setStatus(status_t status);
    status_t reallocate();
    status_t assertReallocate(int buffer);
    
@@ -283,6 +285,12 @@ private:
        inline ssize_t operator()();
    };

    struct StatusUpdate : public UpdateBase {
        const status_t status;
        inline StatusUpdate(SharedBufferBase* sbb, status_t status);
        inline ssize_t operator()();
    };

    struct ReallocateCondition : public ConditionBase {
        int buf;
        inline ReallocateCondition(SharedBufferBase* sbb, int buf);