#0 __GI_raise(6, 6) at ../sysdeps/unix/sysv/linux/raise.c:55
#1 __GI_abort at abort.c:89
#2 __assert_fail_base(0x7ffff7f40029 '%s%s%s:%u: %s%sP'#197#153'edpoklad '#226#128#158'%s'#226#128#156' nespln'#196#155'n.'#10'%n', 0x7ffff772c95d '!xcb_xlib_unknown_req_in_deq', 0x7ffff772c95d '!xcb_xlib_unknown_req_in_deq', 0x7ffff772c92b '../../src/xcb_io.c', 0x7ffff772c92b '../../src/xcb_io.c', 179, 179, 0x7ffff772ce00 'dequeue_pending_request', 0x7ffff772ce00 'dequeue_pending_request') at assert.c:92
#3 __GI___assert_fail(0x7ffff772c95d '!xcb_xlib_unknown_req_in_deq', 0x7ffff772c92b '../../src/xcb_io.c', 179, 0x7ffff772ce00 'dequeue_pending_request') at assert.c:101
#4 ?? at :0
#5 _XReply at :0
#6 XSync at :0
#7 ?? at :0
#8 ?? at :0
#9 RAWIMAGE_CREATEBITMAPS(0x7ffff7f7f8d0, {DESCRIPTION = {FORMAT = RICFRGBA, WIDTH = 1000, HEIGHT = 600, DEPTH = 24, BITORDER = RIBOBITSINORDER, BYTEORDER = RIBOLSBFIRST, LINEORDER = RILOTOPTOBOTTOM, LINEEND = RILEDWORDBOUNDARY, BITSPERPIXEL = 32, REDPREC = 8, REDSHIFT = 16, GREENPREC = 8, GREENSHIFT = 8, BLUEPREC = 8, BLUESHIFT = 0, ALPHAPREC = 0, ALPHASHIFT = 0, MASKBITSPERPIXEL = 1, MASKSHIFT = 0, MASKLINEEND = RILEBYTEBOUNDARY, MASKBITORDER = RIBOBITSINORDER, PALETTECOLORCOUNT = 0, PALETTEBITSPERINDEX = 0, PALETTESHIFT = 0, PALETTELINEEND = RILETIGHT, PALETTEBITORDER = RIBOBITSINORDER, PALETTEBYTEORDER = RIBOLSBFIRST}, DATA = 0x7fffef93b050 '', DATASIZE = 2400000, MASK = 0x7fffef8fb050 '', MASKSIZE = 75000, PALETTE = 0x0, PALETTESIZE = 0}, 140737215869120, 0, false) at gtk2/gtk2lclintf.inc:405
#10 RAWIMAGE_CREATEBITMAPS({DESCRIPTION = {FORMAT = RICFRGBA, WIDTH = 1000, HEIGHT = 600, DEPTH = 24, BITORDER = RIBOBITSINORDER, BYTEORDER = RIBOLSBFIRST, LINEORDER = RILOTOPTOBOTTOM, LINEEND = RILEDWORDBOUNDARY, BITSPERPIXEL = 32, REDPREC = 8, REDSHIFT = 16, GREENPREC = 8, GREENSHIFT = 8, BLUEPREC = 8, BLUESHIFT = 0, ALPHAPREC = 0, ALPHASHIFT = 0, MASKBITSPERPIXEL = 1, MASKSHIFT = 0, MASKLINEEND = RILEBYTEBOUNDARY, MASKBITORDER = RIBOBITSINORDER, PALETTECOLORCOUNT = 0, PALETTEBITSPERINDEX = 0, PALETTESHIFT = 0, PALETTELINEEND = RILETIGHT, PALETTEBITORDER = RIBOBITSINORDER, PALETTEBYTEORDER = RIBOLSBFIRST}, DATA = 0x7fffef93b050 '', DATASIZE = 2400000, MASK = 0x7fffef8fb050 '', MASKSIZE = 75000, PALETTE = 0x0, PALETTESIZE = 0}, 140737215869120, 0, false) at include/lclintf.inc:152
#11 CREATECOMPATIBLEBITMAPS({DESCRIPTION = {FORMAT = RICFRGBA, WIDTH = 1000, HEIGHT = 600, DEPTH = 24, BITORDER = RIBOBITSINORDER, BYTEORDER = RIBOLSBFIRST, LINEORDER = RILOTOPTOBOTTOM, LINEEND = RILEDWORDBOUNDARY, BITSPERPIXEL = 32, REDPREC = 8, REDSHIFT = 16, GREENPREC = 8, GREENSHIFT = 8, BLUEPREC = 8, BLUESHIFT = 0, ALPHAPREC = 0, ALPHASHIFT = 0, MASKBITSPERPIXEL = 1, MASKSHIFT = 0, MASKLINEEND = RILEBYTEBOUNDARY, MASKBITORDER = RIBOBITSINORDER, PALETTECOLORCOUNT = 0, PALETTEBITSPERINDEX = 0, PALETTESHIFT = 0, PALETTELINEEND = RILETIGHT, PALETTEBITORDER = RIBOBITSINORDER, PALETTEBYTEORDER = RIBOLSBFIRST}, DATA = 0x7fffef93b050 '', DATASIZE = 2400000, MASK = 0x7fffef8fb050 '', MASKSIZE = 75000, PALETTE = 0x0, PALETTESIZE = 0}, 140737215869120, 0, false) at graphics.pp:2334
#12 BITMAPHANDLENEEDED(0x7fffefc23040) at include/rasterimage.inc:188
#13 CREATEHANDLE(0x7fffefbb3040) at include/bitmapcanvas.inc:43
#14 REQUIREDSTATE(0x7fffefbb3040, 1) at include/canvas.inc:1698
#15 DOMOVETO(0x7fffefbb3040, 10, 10) at include/canvas.inc:566
#16 FPCANVAS_TFPCUSTOMCANVAS_$__MOVETO$LONGINT$LONGINT at :0
#17 ?? at :0
#18 DOLINE(0x7fffefbb3040, 10, 10, 200, 200) at include/canvas.inc:582
#19 FPCANVAS_TFPCUSTOMCANVAS_$__LINE$LONGINT$LONGINT$LONGINT$LONGINT at :0
#20 ?? at :0
#21 ?? at :0
#22 ?? at :0
#23 ?? at :0
#24 _$FORMS$_Ld110 at :0
#25 EXECUTE(0x7ffff7f791c0) at unit1.pas:53
#26 CLASSES_THREADFUNC$POINTER$$INT64 at :0
#27 CTHREADS_THREADMAIN$POINTER$$POINTER at :0
#28 ?? at :0
#29 ?? at :0
#30 ?? at :0
#31 ?? at :0
#32 ?? at :0
I can use alternative graphics library but this will be more as workaround as I would rather use native solution.May I make a silly question? Can you please point me to the GTK part on your back trace? I've been looking at it for a couple of minutes now trying to see where is the GTK involved in this and to be honest I do not see it. There is an XLib failure that is visible but no GTK call that I can find.
Another workaround could be to compile with qt widgetset instead of gtk2. But main question is if drawing from non-main thread is even supported. I found interesting related article http://blogs.operationaldynamics.com/andrew/software/gnome-desktop/gtk-thread-awareness (http://blogs.operationaldynamics.com/andrew/software/gnome-desktop/gtk-thread-awareness)
So perhaps from LCL perspective locking is either not implemented or need to be done specially from non main thread. I can just compare this to windows API and I can say it is not good that it is not in same way. So either I need to do more investigation to do it properly or I need to add conditional compilation something like:
{$ifdef windows}prepare offscreen bitmap from worker thread{$endif}
{$ifdef unix}prepare offscreen bitmap from main thread{$endif}