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

Commit 260a13a9 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "fix a surface leak in SurfaceFlinger"

parents b5fd7ae4 1b0114f5
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -142,7 +142,8 @@ void Layer::onRemoved()

sp<LayerBaseClient::Surface> Layer::createSurface() const
{
    return mSurface;
    sp<Surface> sur(new SurfaceLayer(mFlinger, const_cast<Layer *>(this)));
    return sur;
}

status_t Layer::ditch()
@@ -152,9 +153,6 @@ status_t Layer::ditch()
    // the layer is not on screen anymore. free as much resources as possible
    mFreezeLock.clear();

    // Free our own reference to ISurface
    mSurface.clear();

    Mutex::Autolock _l(mLock);
    mWidth = mHeight = 0;
    return NO_ERROR;
@@ -202,7 +200,6 @@ status_t Layer::setBuffers( uint32_t w, uint32_t h,
    int layerRedsize = info.getSize(PixelFormatInfo::INDEX_RED);
    mNeedsDithering = layerRedsize > displayRedSize;

    mSurface = new SurfaceLayer(mFlinger, this);
    return NO_ERROR;
}

+0 −1
Original line number Diff line number Diff line
@@ -213,7 +213,6 @@ private:
    ClientRef mUserClientRef;

    // constants
    sp<Surface> mSurface;
    PixelFormat mFormat;
    const GLExtensions& mGLExtensions;
    bool mNeedsBlending;
+10 −7
Original line number Diff line number Diff line
@@ -540,7 +540,9 @@ int32_t LayerBaseClient::sIdentity = 1;

LayerBaseClient::LayerBaseClient(SurfaceFlinger* flinger, DisplayID display,
        const sp<Client>& client)
    : LayerBase(flinger, display), mClientRef(client),
    : LayerBase(flinger, display),
      mHasSurface(false),
      mClientRef(client),
      mIdentity(uint32_t(android_atomic_inc(&sIdentity)))
{
}
@@ -557,12 +559,13 @@ sp<LayerBaseClient::Surface> LayerBaseClient::getSurface()
{
    sp<Surface> s;
    Mutex::Autolock _l(mLock);
    s = mClientSurface.promote();
    if (s == 0) {

    LOG_ALWAYS_FATAL_IF(mHasSurface,
            "LayerBaseClient::getSurface() has already been called");

    mHasSurface = true;
    s = createSurface();
        mClientSurface = s;
    mClientSurfaceBinder = s->asBinder();
    }
    return s;
}

+1 −1
Original line number Diff line number Diff line
@@ -337,7 +337,7 @@ protected:

private:
    mutable Mutex mLock;
    mutable wp<Surface> mClientSurface;
    mutable bool mHasSurface;
    wp<IBinder> mClientSurfaceBinder;
    const wp<Client> mClientRef;
    // only read