mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-10 20:04:46 +00:00
C++11 supports thread-safe initialization of statics
A static local variable is guaranteed to be initialized only once, and in time. Lambda expressions can be used to perform complex initialization of those static variables on the spot. (starting from: gcc >= 4.8, msvc >= 2015)
This commit is contained in:
parent
4d7b912ca1
commit
2fd2e65745
@ -223,7 +223,6 @@ ConverterCache::~ConverterCache()
|
||||
}
|
||||
|
||||
|
||||
// FIXME THREAD
|
||||
ConverterCache & ConverterCache::get()
|
||||
{
|
||||
// Now return the cache
|
||||
|
@ -486,16 +486,18 @@ Buffer * copyToTempBuffer(ParagraphList const & paragraphs, DocumentClassConstPt
|
||||
// to be so, but the alternative is to construct a new one of these (with a
|
||||
// new temporary directory, etc) every time, and then to destroy it. So maybe
|
||||
// it's worth just keeping this one around.
|
||||
// FIXME THREAD
|
||||
static TempFile tempfile("clipboard.internal");
|
||||
tempfile.setAutoRemove(false);
|
||||
static Buffer * staticbuffer = theBufferList().newInternalBuffer(
|
||||
tempfile.name().absFileName());
|
||||
|
||||
// These two things only really need doing the first time.
|
||||
staticbuffer->setUnnamed(true);
|
||||
staticbuffer->inset().setBuffer(*staticbuffer);
|
||||
|
||||
// The initialization of staticbuffer is thread-safe. Using a lambda
|
||||
// guarantees that the properties are set only once.
|
||||
static Buffer * staticbuffer = [&](){
|
||||
Buffer * b =
|
||||
theBufferList().newInternalBuffer(tempfile.name().absFileName());
|
||||
b->setUnnamed(true);
|
||||
b->inset().setBuffer(*b);
|
||||
//initialize staticbuffer with b
|
||||
return b;
|
||||
}();
|
||||
// Use a clone for the complicated stuff so that we do not need to clean
|
||||
// up in order to avoid a crash.
|
||||
Buffer * buffer = staticbuffer->cloneBufferOnly();
|
||||
|
@ -1251,7 +1251,7 @@ void GuiWorkArea::inputMethodEvent(QInputMethodEvent * e)
|
||||
stopBlinkingCursor();
|
||||
|
||||
// last_width : for checking if last preedit string was/wasn't empty.
|
||||
// FIXME THREAD
|
||||
// FIXME THREAD && FIXME
|
||||
// We could have more than one work area, right?
|
||||
static bool last_width = false;
|
||||
if (!last_width && preedit_string.empty()) {
|
||||
|
@ -44,7 +44,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
// FIXME THREAD
|
||||
Cache & Cache::get()
|
||||
{
|
||||
// Now return the cache
|
||||
|
@ -78,7 +78,6 @@ static int const s_numimages_ = 10;
|
||||
static int const s_millisecs_ = 500;
|
||||
|
||||
|
||||
// FIXME THREAD
|
||||
LoaderQueue & LoaderQueue::get()
|
||||
{
|
||||
static LoaderQueue singleton;
|
||||
|
@ -64,9 +64,9 @@ int timeout_min()
|
||||
|
||||
string const python(bool reset)
|
||||
{
|
||||
// FIXME THREAD
|
||||
// Check whether the first python in PATH is the right one.
|
||||
static string command = python23("python -tt");
|
||||
// FIXME THREAD
|
||||
if (reset) {
|
||||
command = python23("python -tt");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user