void SurfaceComposerClient::dispose() { // this can be called more than once. sp<IMemoryHeap> controlMemory; sp<ISurfaceFlingerClient> client; { Mutex::Autolock _lg(gLock); Mutex::Autolock _lm(mLock); mSignalServer = 0; if (mClient != 0) { client = mClient; mClient.clear(); ssize_t i = gActiveConnections.indexOfKey(client->asBinder()); if (i >= 0 && gActiveConnections.valueAt(i) == this) { VERBOSE("Removing client %p from map at %d", this, int(i)); gActiveConnections.removeItemsAt(i); } } delete mPrebuiltLayerState; mPrebuiltLayerState = 0; controlMemory = mControlMemory; mControlMemory.clear(); mControl = 0; mStatus = NO_INIT; } }
void SurfaceComposerClient::dispose() { // this can be called more than once. sp<ISurfaceComposerClient> client; Mutex::Autolock _lm(mLock); if (mClient != 0) { client = mClient; // hold ref while lock is held mClient.clear(); } mStatus = NO_INIT; }