ThreadMSG* tmsg = new ThreadMSG(); // NOLINT: pointer owner
tmsg->func = [=] { return pleaseWipeCaches(canon, true, 0xffff); };
tmsg->wantAnswer = false;
+ __tsan_release(tmsg);
+
if (write(RecThreadInfo::info(0).getPipes().writeToThread, &tmsg, sizeof(tmsg)) != sizeof(tmsg)) { // NOLINT: correct sizeof
+ __tsan_acquire(tmsg);
delete tmsg; // NOLINT: pointer owner
unixDie("write to thread pipe returned wrong size or error");
ThreadMSG* tmsg = new ThreadMSG(); // NOLINT: pointer ownership
tmsg->func = func;
tmsg->wantAnswer = false;
+ __tsan_release(tmsg);
if (!trySendingQueryToWorker(target, tmsg)) {
/* if this function failed but did not raise an exception, it means that the pipe
if (!trySendingQueryToWorker(newTarget, tmsg)) {
t_Counters.at(rec::Counter::queryPipeFullDrops)++;
+ __tsan_acquire(tmsg);
delete tmsg; // NOLINT: pointer ownership
}
}