SurfaceFlinger: Avoid destroying Layer on Binder thread
BufferQueueLayer::onFrameAvailable passes 'this' as an sp<Layer> to SurfaceInterceptor. This constructs a temporary sp<Layer>. We are on a binder thread and not holding any locks, so at this point the main thread could drop it's last references. Then when we destroy our temporary sp<Layer> it is the last reference and we end up invoking ~Layer from the Binder thread, an invalid operation which in this case leads to dead-lock (as we attempt to reacquire the already acquired BufferQueue mutex from the BufferQueueLayer d'tor) Bug: 149473038 Test: Existing tests pass Change-Id: I77a20bedf2db3b974ac03d804f70993514478fb2
Loading
Please register or sign in to comment