Static initialization order fiasco in utils.h
PeterZhizhin opened this issue · 0 comments
PeterZhizhin commented
There are two global variables in utils.h that cause a static initialization order fiasco: all_sinks
and standard_sink
.
The Sink
class uses all_sinks
in a constructor:
explicit Sink(SinkOptions o) : opts(o) { all_sinks.append(this); }
There is a global variable called standard_sink
created as standard_sink(SinkOptions(STDERR_FILENO))
.
As per C++ standard, the order of static variables initialization is undefined. Which means that standard_sink
may be created before all_sinks
is initialized. See https://isocpp.org/wiki/faq/ctors#static-init-order for more information.