From: Tom de Vries Date: Fri, 15 Jul 2022 11:32:03 +0000 (+0200) Subject: [gdbsupport] Workaround data race in get_print_cell X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5a74a1a5283a041c577a502509f7b48ce770b106;p=thirdparty%2Fbinutils-gdb.git [gdbsupport] Workaround data race in get_print_cell 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. --- diff --git a/gdbsupport/print-utils.cc b/gdbsupport/print-utils.cc index 7bbb6deea74..7d10743fa0d 100644 --- a/gdbsupport/print-utils.cc +++ b/gdbsupport/print-utils.cc @@ -29,12 +29,7 @@ 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 *