To fix that issue you only need to recompile compiz too. And that's enough.
However, then the tests fail because of a crash inside libglvnd at exit:
#0 0x00007ffff3e0c11b in malloc_consolidate (av=av@entry=0x7ffff415dc20 <main_arena>) at malloc.c:4492
#1 0x00007ffff3e0de08 in _int_free (av=0x7ffff415dc20 <main_arena>, p=<optimized out>, have_lock=0) at malloc.c:4398
#2 0x00007ffff3e1244e in __GI___libc_free (mem=<optimized out>) at malloc.c:3145
#3 0x00007fffed5102dd in __glDispatchDestroyTable (dispatch=0x5555558d63c0) at GLdispatch.c:321
#4 0x00007fffed5df10f in CleanupVendorNameEntry (unused=0x0, pEntry=0x555555944210) at libglxmapping.c:311
#5 0x00007fffed5e8866 in __glXMappingTeardown (doReset=0) at libglxmapping.c:1061
#6 0x00007fffed5dec80 in __glXFini () at libglx.c:2099
#7 0x00007ffff7de621a in _dl_fini () at dl-fini.c:235
#8 0x00007ffff3dbeec0 in __run_exit_handlers (status=0, listp=0x7ffff415d6f8 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:83
#9 0x00007ffff3dbef1a in __GI_exit (status=<optimized out>) at exit.c:105
#10 0x00007ffff3da41c8 in __libc_start_main (main=
0x5555556b9d45 <main(int, char**)>, argc=1, argv=0x7fffffffd128, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffd118) at ../csu/libc-start.c:342
#11 0x000055555568908a in _start ()
(gdb) f 3
#3 0x00007fffed5102dd in __glDispatchDestroyTable (dispatch=0x5555558d63c0) at GLdispatch.c:321
321 free(dispatch->table);
(gdb)
In fact when the nux windowthread is closed, and its graphic display is free'd we do a call to glXDestroyContext which leads to this crash because for some reason the dispatch->table is already free'd by something else (the driver?).
Getting rid of that line fixes the issue, but indeed isn't correct.
There's a comment on __glDispatchDestroyTable saying
/*
* XXX: Technically, dispatch->currentThreads should be 0 if we're calling
* into this function, but buggy apps may unload libGLX without losing
* current, in which case this won't be true when the dispatch table
* is destroyed.
*/
Not sure if this is the case though, as it's quite cryptic to me.
To fix that issue you only need to recompile compiz too. And that's enough.
However, then the tests fail because of a crash inside libglvnd at exit:
#0 0x00007ffff3e0c11b in malloc_consolidate (av=av@ entry=0x7ffff41 5dc20 <main_arena>) at malloc.c:4492 troyTable (dispatch= 0x5555558d63c0) at GLdispatch.c:321 meEntry (unused=0x0, pEntry= 0x555555944210) at libglxmapping.c:311 rdown (doReset=0) at libglxmapping. c:1061 5d6f8 <__exit_funcs>, run_list_ atexit= run_list_ atexit@ entry=true, run_dtors= run_dtors@ entry=true) at exit.c:83 d128, init=<optimized out>, fini=<optimized out>, rtld_fini= <optimized out>, stack_end= 0x7fffffffd118) at ../csu/ libc-start. c:342 troyTable (dispatch= 0x5555558d63c0) at GLdispatch.c:321 >table) ;
#1 0x00007ffff3e0de08 in _int_free (av=0x7ffff415dc20 <main_arena>, p=<optimized out>, have_lock=0) at malloc.c:4398
#2 0x00007ffff3e1244e in __GI___libc_free (mem=<optimized out>) at malloc.c:3145
#3 0x00007fffed5102dd in __glDispatchDes
#4 0x00007fffed5df10f in CleanupVendorNa
#5 0x00007fffed5e8866 in __glXMappingTea
#6 0x00007fffed5dec80 in __glXFini () at libglx.c:2099
#7 0x00007ffff7de621a in _dl_fini () at dl-fini.c:235
#8 0x00007ffff3dbeec0 in __run_exit_handlers (status=0, listp=0x7ffff41
#9 0x00007ffff3dbef1a in __GI_exit (status=<optimized out>) at exit.c:105
#10 0x00007ffff3da41c8 in __libc_start_main (main=
0x5555556b9d45 <main(int, char**)>, argc=1, argv=0x7fffffff
#11 0x000055555568908a in _start ()
(gdb) f 3
#3 0x00007fffed5102dd in __glDispatchDes
321 free(dispatch-
(gdb)
In fact when the nux windowthread is closed, and its graphic display is free'd we do a call to glXDestroyContext which leads to this crash because for some reason the dispatch->table is already free'd by something else (the driver?).
Getting rid of that line fixes the issue, but indeed isn't correct.
There's a comment on __glDispatchDes troyTable saying >currentThreads should be 0 if we're calling
/*
* XXX: Technically, dispatch-
* into this function, but buggy apps may unload libGLX without losing
* current, in which case this won't be true when the dispatch table
* is destroyed.
*/
Not sure if this is the case though, as it's quite cryptic to me.