diff options
author | Tom de Vries <tdevries@suse.de> | 2022-07-15 13:32:03 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2022-07-21 15:06:40 +0200 |
commit | 5a74a1a5283a041c577a502509f7b48ce770b106 (patch) | |
tree | 0957952c764d4ad783820a2a4d07c13130c3d46f | |
parent | 060f7c545b27007945431ed5f6aa10d659d7baa6 (diff) | |
download | gdb-5a74a1a5283a041c577a502509f7b48ce770b106.zip gdb-5a74a1a5283a041c577a502509f7b48ce770b106.tar.gz gdb-5a74a1a5283a041c577a502509f7b48ce770b106.tar.bz2 |
[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.
-rw-r--r-- | gdbsupport/print-utils.cc | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/gdbsupport/print-utils.cc b/gdbsupport/print-utils.cc index 7bbb6de..7d10743 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 * |