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

Commit 6b4a8786 authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru Committed by Android Code Review
Browse files

Merge "Only hold a weak pointer on SurfaceComposerClients"

parents d181206c 166bcf90
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -56,7 +56,7 @@ namespace android {
// Must not be holding SurfaceComposerClient::mLock when acquiring gLock here.
// Must not be holding SurfaceComposerClient::mLock when acquiring gLock here.
static Mutex                                                gLock;
static Mutex                                                gLock;
static sp<ISurfaceComposer>                                 gSurfaceManager;
static sp<ISurfaceComposer>                                 gSurfaceManager;
static DefaultKeyedVector< sp<IBinder>, sp<SurfaceComposerClient> > gActiveConnections;
static DefaultKeyedVector< sp<IBinder>, wp<SurfaceComposerClient> > gActiveConnections;
static SortedVector<sp<SurfaceComposerClient> >             gOpenTransactions;
static SortedVector<sp<SurfaceComposerClient> >             gOpenTransactions;
static sp<IMemoryHeap>                                      gServerCblkMemory;
static sp<IMemoryHeap>                                      gServerCblkMemory;
static volatile surface_flinger_cblk_t*                     gServerCblk;
static volatile surface_flinger_cblk_t*                     gServerCblk;
@@ -193,7 +193,7 @@ SurfaceComposerClient::clientForConnection(const sp<IBinder>& conn)


    { // scope for lock
    { // scope for lock
        Mutex::Autolock _l(gLock);
        Mutex::Autolock _l(gLock);
        client = gActiveConnections.valueFor(conn);
        client = gActiveConnections.valueFor(conn).promote();
    }
    }


    if (client == 0) {
    if (client == 0) {
@@ -361,8 +361,8 @@ void SurfaceComposerClient::openGlobalTransaction()
    const size_t N = gActiveConnections.size();
    const size_t N = gActiveConnections.size();
    VERBOSE("openGlobalTransaction (%ld clients)", N);
    VERBOSE("openGlobalTransaction (%ld clients)", N);
    for (size_t i=0; i<N; i++) {
    for (size_t i=0; i<N; i++) {
        sp<SurfaceComposerClient> client(gActiveConnections.valueAt(i));
        sp<SurfaceComposerClient> client(gActiveConnections.valueAt(i).promote());
        if (gOpenTransactions.indexOf(client) < 0) {
        if (client != 0 && gOpenTransactions.indexOf(client) < 0) {
            if (client->openTransaction() == NO_ERROR) {
            if (client->openTransaction() == NO_ERROR) {
                if (gOpenTransactions.add(client) < 0) {
                if (gOpenTransactions.add(client) < 0) {
                    // Ooops!
                    // Ooops!