Fic crash for repeated pasting from complex docs

Using a cloned buffer was an idea by Richard, and it works well.
This commit is contained in:
Georg Baum 2013-04-21 21:15:54 +02:00
parent ed2f6a8599
commit 928dc03324

View File

@ -478,12 +478,17 @@ void putClipboard(ParagraphList const & paragraphs,
// to be so, but the alternative is to construct a new one of these (with a // 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 // new temporary directory, etc) every time, and then to destroy it. So maybe
// it's worth just keeping this one around. // it's worth just keeping this one around.
static Buffer * buffer = theBufferList().newInternalBuffer( Buffer * staticbuffer = theBufferList().newInternalBuffer(
FileName::tempName("clipboard.internal").absFileName()); FileName::tempName("clipboard.internal").absFileName());
// These two things only really need doing the first time. // These two things only really need doing the first time.
buffer->setUnnamed(true); staticbuffer->setUnnamed(true);
buffer->inset().setBuffer(*buffer); staticbuffer->inset().setBuffer(*staticbuffer);
// 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();
LASSERT(buffer, return);
// This needs doing every time. // This needs doing every time.
buffer->params().setDocumentClass(docclass); buffer->params().setDocumentClass(docclass);
@ -521,7 +526,7 @@ void putClipboard(ParagraphList const & paragraphs,
theClipboard().put(lyx, oshtml.str(), plaintext); theClipboard().put(lyx, oshtml.str(), plaintext);
// Save that memory // Save that memory
buffer->paragraphs().clear(); delete buffer;
} }