X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.cpp;h=4ec9811d90bb8fd086e2e30be20ecb958bf1b620;hb=0a603c5d0e370c8b9c9e0f5dfa024b6e500b2dd4;hp=988dba41542fd375439dc54f5a6d5f2b175302c8;hpb=f49556b3ed1c4adb610b00385e60cf695f4aa914;p=lyx.git diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index 988dba4154..4ec9811d90 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -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();