summaryrefslogtreecommitdiffstats
path: root/Python/instrumentation.c
diff options
context:
space:
mode:
authorDino Viehland <dinoviehland@meta.com>2024-04-30 18:38:05 (GMT)
committerGitHub <noreply@github.com>2024-04-30 18:38:05 (GMT)
commit4a1cf66c5c0afa36d7a51d5f9d3874cda10df79c (patch)
tree3a37a8d9e9758ba71ad558a051324c20e140c777 /Python/instrumentation.c
parent1f16b4ce569f222af74fcbb7b2ef98eee2398d20 (diff)
downloadcpython-4a1cf66c5c0afa36d7a51d5f9d3874cda10df79c.zip
cpython-4a1cf66c5c0afa36d7a51d5f9d3874cda10df79c.tar.gz
cpython-4a1cf66c5c0afa36d7a51d5f9d3874cda10df79c.tar.bz2
gh-117657: Fix small issues with instrumentation and TSAN (#118064)
Small TSAN fixups for instrumentation
Diffstat (limited to 'Python/instrumentation.c')
-rw-r--r--Python/instrumentation.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/Python/instrumentation.c b/Python/instrumentation.c
index 328a3b1..ce97c3a 100644
--- a/Python/instrumentation.c
+++ b/Python/instrumentation.c
@@ -626,9 +626,10 @@ de_instrument(PyCodeObject *code, int i, int event)
return;
}
CHECK(_PyOpcode_Deopt[deinstrumented] == deinstrumented);
- *opcode_ptr = deinstrumented;
+ FT_ATOMIC_STORE_UINT8_RELAXED(*opcode_ptr, deinstrumented);
if (_PyOpcode_Caches[deinstrumented]) {
- instr[1].counter = adaptive_counter_warmup();
+ FT_ATOMIC_STORE_UINT16_RELAXED(instr[1].counter.as_counter,
+ adaptive_counter_warmup().as_counter);
}
}
@@ -703,8 +704,10 @@ instrument(PyCodeObject *code, int i)
int deopt = _PyOpcode_Deopt[opcode];
int instrumented = INSTRUMENTED_OPCODES[deopt];
assert(instrumented);
- *opcode_ptr = instrumented;
+ FT_ATOMIC_STORE_UINT8_RELAXED(*opcode_ptr, instrumented);
if (_PyOpcode_Caches[deopt]) {
+ FT_ATOMIC_STORE_UINT16_RELAXED(instr[1].counter.as_counter,
+ adaptive_counter_warmup().as_counter);
instr[1].counter = adaptive_counter_warmup();
}
}