[testfail] Intermittent "Invalid read" in MirSurfaceSwapBuffersTest.swap_buffers_does_not_block_when_surface_is_not_composited
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
Medium
|
Alan Griffiths | ||
mir (Ubuntu) |
Fix Released
|
Medium
|
Unassigned |
Bug Description
Looks like a race during shutdown
https:/
[ RUN ] MirSurfaceSwapB
==1490== Thread 2:
==1490== Invalid read of size 4
==1490== at 0x50B8F57: std::_Function_
==1490== by 0x507ADE8: std::function<void ()>::operator()() const (functional:2471)
==1490== by 0x50880C4: boost::
==1490== by 0x508D604: boost::
==1490== by 0x5092020: boost::
==1490== by 0x50876FD: mir::AsioMainLo
==1490== by 0x50795A5: mir::DisplaySer
==1490== by 0x507498E: mir::run_
==1490== by 0x71D974: std::thread:
==1490== by 0x683ADDF: ??? (in /usr/lib/
==1490== by 0x5CDE164: start_thread (pthread_
==1490== by 0x6DA14DC: clone (clone.S:111)
==1490== Address 0xd08d538 is 24 bytes inside a block of size 32 free'd
==1490== at 0x4C2C2BC: operator delete(void*) (in /usr/lib/
==1490== by 0x50B8E1A: (anonymous namespace)
==1490== by 0x50BE92A: mir::compositor
==1490== by 0x50A9AE4: std::_Sp_
==1490== by 0x50AA299: mir::compositor
==1490== by 0x50A9A94: std::_Sp_
==1490== by 0x5116FB0: mir::scene:
==1490== by 0x5130C95: std::_Sp_
==1490== by 0x5114AE0: mir::scene:
==1490== by 0x50C6D4B: mir::frontend:
==1490== by 0x50CE323: void mir::frontend:
==1490== by 0x50CBC5A: mir::frontend:
==1490==
[ OK ] MirSurfaceSwapB
Related branches
- PS Jenkins bot (community): Approve (continuous-integration)
- Kevin DuBois (community): Approve
- Andreas Pokorny (community): Approve
- Cemil Azizoglu (community): Approve
-
Diff: 122 lines (+41/-30)2 files modifiedsrc/server/asio_main_loop.cpp (+33/-22)
src/server/compositor/timeout_frame_dropping_policy_factory.cpp (+8/-8)
Changed in mir: | |
status: | New → In Progress |
Changed in mir: | |
status: | In Progress → Fix Committed |
Changed in mir: | |
importance: | Undecided → Medium |
milestone: | none → 0.4.0 |
Changed in mir: | |
status: | Fix Committed → Fix Released |
First a surface containing a TimeoutFrameDro ppingPolicy is destroyed:
==1490== Address 0xd08d538 is 24 bytes inside a block of size 32 free'd :SessionMediato r::release_ surface( google: :protobuf: :RpcController* , mir::protobuf: :SurfaceId const*, mir::protobuf: :Void*, google: :protobuf: :Closure* ) (session_ mediator. cpp:266)
...
==1490== by 0x50C6D4B: mir::frontend:
Then an alarm fires that tries to execute the lambda created in the TimeoutFrameDro ppingPolicy constructor...
BANG!