From 5cea797ef1cb2cb2592e0586b364644a58659c0d Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Fri, 28 Feb 2014 09:58:34 +0100 Subject: [PATCH] Scene is copied before being queued to avoid concurrence --- src/core/UBPersistenceManager.cpp | 6 +++++- src/core/UBPersistenceWorker.cpp | 5 ++++- src/domain/UBGraphicsScene.cpp | 8 -------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index c103ed5f..073b0ee4 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -738,7 +738,11 @@ void UBPersistenceManager::persistDocumentScene(UBDocumentProxy* pDocumentProxy, if (pScene->isModified()) { UBThumbnailAdaptor::persistScene(pDocumentProxy, pScene, pSceneIndex); - mWorker->saveScene(pDocumentProxy, pScene, pSceneIndex); + QTime time; + time.start(); + UBGraphicsScene* copiedScene = pScene->sceneDeepCopy(); + qDebug() << "time to duplicate scene " << time.elapsed() << " ms"; + mWorker->saveScene(pDocumentProxy, copiedScene, pSceneIndex); pScene->setModified(false); } diff --git a/src/core/UBPersistenceWorker.cpp b/src/core/UBPersistenceWorker.cpp index 1c9dc1bd..b9ca932e 100644 --- a/src/core/UBPersistenceWorker.cpp +++ b/src/core/UBPersistenceWorker.cpp @@ -57,8 +57,11 @@ void UBPersistenceWorker::process() mSemaphore.acquire(); do{ PersistenceInformation info = saves.takeFirst(); - if(info.action == WriteScene) + if(info.action == WriteScene){ UBSvgSubsetAdaptor::persistScene(info.proxy, info.scene, info.sceneIndex); + delete info.scene; + info.scene = NULL; + } else{ emit sceneLoaded(UBSvgSubsetAdaptor::loadSceneAsText(info.proxy,info.sceneIndex), info.proxy, info.sceneIndex); } diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 6b5d78f6..13447d60 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -665,14 +665,6 @@ void UBGraphicsScene::DisposeMagnifierQWidgets() magniferControlViewWidget = NULL; } - if(magniferDisplayViewWidget) - { - magniferDisplayViewWidget->hide(); - magniferDisplayViewWidget->setParent(0); - delete magniferDisplayViewWidget; - magniferDisplayViewWidget = NULL; - } - // some time have crash here on access to app (when call from destructor when close OpenBoard app) // so i just add try/catch section here try