Data race between:
...
Write of size 4 at 0x00000324eb60 by thread T2:
#0 get_print_cell() gdbsupport/print-utils.cc:35 (gdb+0x1c032c7)
#1 hex_string(long) gdbsupport/print-utils.cc:230 (gdb+0x1c03bc2)
#2 sect_offset_str gdb/gdbtypes.h:82 (gdb+0x81b333)
#3 process_queue_item gdb/dwarf2/read.c:7581 (gdb+0x831645)
...
and:
...
Previous read of size 4 at 0x00000324eb60 by thread T3:
#0 get_print_cell() gdbsupport/print-utils.cc:35 (gdb+0x1c032b4)
#1 hex_string(long) gdbsupport/print-utils.cc:230 (gdb+0x1c03bc2)
#2 sect_offset_str gdb/gdbtypes.h:82 (gdb+0x81b333)
#3 process_queue_item gdb/dwarf2/read.c:7581 (gdb+0x831645)
...
For now, just do a malloc in get_print_cell to work around the data race.
char *
get_print_cell (void)
{
- static char buf[NUMCELLS][PRINT_CELL_SIZE];
- static int cell = 0;
-
- if (++cell >= NUMCELLS)
- cell = 0;
- return buf[cell];
+ return (char *)malloc (PRINT_CELL_SIZE);
}
static char *