Skip to content

Instantly share code, notes, and snippets.

View choller's full-sized avatar

Christian Holler (:decoder) choller

View GitHub Profile
@choller
choller / bitfield-write.cpp
Created March 31, 2021 13:25
Bitfield Modification in C++
int32_t oldVals = myVal.bitfields; // load all bitfields
int32_t newVals = oldVals | 1 << fieldOffset; // modify just one
myVal.bitfields = newVals; // write all bitfields
@choller
choller / racy-init.cpp
Created March 31, 2021 13:24
Common Racy Initialization Pattern in C++
static bool sInitialized = false;
static Mutex sMutex; // guards sInitialized
// racily check if initialized (gotta go fast!)
if (!sInitialized) {
// now properly check
auto lock = sMutex.Lock();
if (!sInitialized) {
WARNING: ThreadSanitizer: data race (pid=1544)
Write of size 8 at 0x7b30000048d8 by thread T21:
#0 __xstat64 compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:6607:3
#1 stat64 /usr/include/x86_64-linux-gnu/sys/stat.h:504:10
#2 FillStatCache xpcom/io/nsLocalFileUnix.cpp:304:7
#3 nsLocalFile::GetPermissions(unsigned int*) xpcom/io/nsLocalFileUnix.cpp:1254:3
#4 nsAtomicFileOutputStream::DoOpen() netwerk/base/nsFileStreams.cpp:804:9
[...]
#10 mozilla::PreferencesWriter::Write([...]) modules/libpref/Preferences.cpp:2907:10
[...]
@choller
choller / tsan-race.txt
Created March 31, 2021 13:16
TSan data race
WARNING: ThreadSanitizer: data race (pid=1121)
Read of size 2 at 0x7b74001a6fdc by main thread (mutexes: write M899729694995224136, write M119199653296761384):
#0 mozilla::layers::AsyncPanZoomController::ApplyAsyncTestAttributes() gfx/layers/apz/src/AsyncPanZoomController.cpp:4218:7
#1 AutoApplyAsyncTestAttributes gfx/layers/apz/src/AsyncPanZoomController.cpp:596:10
[...]
#34 main browser/app/nsBrowserApp.cpp:308:16
Previous write of size 2 at 0x7b74001a6fdc by thread T29:
#0 MarkAsyncTransformAppliedToContent gfx/layers/apz/src/AsyncPanZoomController.h:1605:37
#1 mozilla::layers::APZSampler::MarkAsyncTransformAppliedToContent([...]) gfx/layers/apz/src/APZSampler.cpp:192:21
@choller
choller / basic-data-race.cpp
Created February 26, 2021 12:59
Basic C++ program with a simple data race
#include <iostream>
#include <thread>
int x = 0;
void print_x() {
std::cerr << "x is " << x << std::endl;
}
void set_x(int new_x) {