llvmpipe: dEQP-EGL programs.link failures.
Backtrace from a fail in dEQP-EGL.functional.sharing.gles2.multithread.random_egl_server_sync.programs.link.7
:
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
#1 0x00007ffff76895df in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#2 0x00007ffff763da02 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007ffff7628469 in __GI_abort () at ./stdlib/abort.c:79
#4 0x00007ffff7628395 in __assert_fail_base (fmt=0x7ffff77b7cd0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n",
assertion=0x7ffff4daaca8 "c != _SIMPLE_MTX_INVALID_VALUE", file=0x7ffff4da8675 "../src/util/simple_mtx.h", line=131, function=<optimized out>)
at ./assert/assert.c:92
#5 0x00007ffff7636ab2 in __GI___assert_fail (assertion=assertion@entry=0x7ffff4daaca8 "c != _SIMPLE_MTX_INVALID_VALUE",
file=file@entry=0x7ffff4da8675 "../src/util/simple_mtx.h", line=line@entry=131,
function=function@entry=0x7ffff44f49c0 <__PRETTY_FUNCTION__.9> "simple_mtx_unlock") at ./assert/assert.c:101
#6 0x00007ffff50b2a73 in simple_mtx_unlock (mtx=0x7fffdc202188) at ../src/util/simple_mtx.h:131
#7 0x00007ffff50b38f0 in simple_mtx_unlock (mtx=0x7fffdc202188) at ../src/util/simple_mtx.h:135
#8 st_save_zombie_shader (st=0x7fffdc2007c0, type=<optimized out>, shader=0x7fffdc215700) at ../src/mesa/state_tracker/st_context.c:270
#9 0x00007ffff50dc0b7 in delete_variant (st=st@entry=0x7fffe42377e0, v=0x7fffdc229fd0, target=<optimized out>)
at ../src/mesa/state_tracker/st_program.c:262
#10 0x00007ffff50dc95f in st_release_variants (st=0x7fffe42377e0, p=p@entry=0x7fffdc21fa80) at ../src/mesa/state_tracker/st_program.c:319
#11 0x00007ffff508f3ff in _mesa_delete_program (ctx=ctx@entry=0x7ffff6dbe010, prog=prog@entry=0x7fffdc21fa80) at ../src/mesa/program/program.c:250
#12 0x00007ffff508f578 in _mesa_reference_program_ (ctx=ctx@entry=0x7ffff6dbe010, ptr=ptr@entry=0x7fffdc22ad68, prog=prog@entry=0x0)
at ../src/mesa/program/program.c:328
#13 0x00007ffff501fc93 in _mesa_reference_program (prog=0x0, ptr=0x7fffdc22ad68, ctx=0x7ffff6dbe010) at ../src/mesa/program/program.h:90
#14 _mesa_delete_linked_shader (sh=0x7fffdc22ad50, ctx=0x7ffff6dbe010) at ../src/mesa/main/shaderobj.c:149
#15 _mesa_clear_shader_program_data (ctx=ctx@entry=0x7ffff6dbe010, shProg=shProg@entry=0x7fffdc220260) at ../src/mesa/main/shaderobj.c:339
#16 0x00007ffff501fd43 in _mesa_free_shader_program_data (ctx=ctx@entry=0x7ffff6dbe010, shProg=shProg@entry=0x7fffdc220260)
at ../src/mesa/main/shaderobj.c:375
#17 0x00007ffff501ff6d in _mesa_delete_shader_program (shProg=0x7fffdc220260, ctx=0x7ffff6dbe010) at ../src/mesa/main/shaderobj.c:421
#18 _mesa_reference_shader_program_ (ctx=ctx@entry=0x7ffff6dbe010, ptr=ptr@entry=0x7fffdbffe848, shProg=shProg@entry=0x0)
at ../src/mesa/main/shaderobj.c:264
#19 0x00007ffff50195fa in _mesa_reference_shader_program (shProg=0x0, ptr=0x7fffdbffe848, ctx=0x7ffff6dbe010) at ../src/mesa/main/shaderobj.h:83
#20 delete_shader_program (name=16, ctx=0x7ffff6dbe010) at ../src/mesa/main/shaderapi.c:485
#21 _mesa_DeleteProgram (name=16) at ../src/mesa/main/shaderapi.c:1721
#22 0x00005555555c9387 in deqp::egl::GLES2ThreadTest::DeleteProgram::exec (this=0x555555a1fb40, t=...)
at /home/anholt/src/VK-GL-CTS/modules/egl/teglGLES2SharingThreadedTests.cpp:1532
#23 0x00005555555d1dff in deqp::egl::GLES2ThreadTest::Operation::execute (this=0x555555a1fb40, t=...)
at /home/anholt/src/VK-GL-CTS/modules/egl/teglGLES2SharingThreadedTests.cpp:480
--Type <RET> for more, q to quit, c to continue without paging--frame 8
#24 0x00005555557dfd90 in tcu::ThreadUtil::Thread::run (this=0x555555a149e0) at /home/anholt/src/VK-GL-CTS/framework/common/tcuThreadUtil.cpp:207
#25 0x000055555580148e in startThread (entryPtr=<optimized out>) at /home/anholt/src/VK-GL-CTS/framework/delibs/dethread/unix/deThreadUnix.c:67
#26 0x00007ffff768784a in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#27 0x00007ffff770b2cc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
So, we're trying to hand a zombie to another context since we don't own it, but that st has presumably exited already (causing its mutex to get reset). @mareko how is this supposed to work? Seems like we need to keep a refcount on the other st somehow.