[Libreoffice-commits] core.git: Branch 'feature/datastreams' - sc/source
Matúš Kukan
matus.kukan at collabora.com
Mon Nov 25 01:45:57 PST 2013
sc/source/ui/docshell/datastream.cxx | 17 ++++++++++++-----
sc/source/ui/inc/datastream.hxx | 3 +++
2 files changed, 15 insertions(+), 5 deletions(-)
New commits:
commit 93098819ccbc4cf7448b429e13d36c170f38ac39
Author: Matúš Kukan <matus.kukan at collabora.com>
Date: Mon Nov 25 10:44:08 2013 +0100
datastreams: do not hang when closing the link
Change-Id: Ib38472849d7b56bf3013f65d84f1b4cfbd91b2d0
diff --git a/sc/source/ui/docshell/datastream.cxx b/sc/source/ui/docshell/datastream.cxx
index 8064bc8..79d637c 100644
--- a/sc/source/ui/docshell/datastream.cxx
+++ b/sc/source/ui/docshell/datastream.cxx
@@ -54,9 +54,9 @@ private:
TimeValue const aTime = {0, 100000};
maStart.wait();
maStart.reset();
- if (!mbTerminate)
- while (mpDataStream->ImportData())
- wait(aTime);
+ while (!mbTerminate && mpDataStream->ImportData())
+ wait(aTime);
+ mpDataStream->maMakeSureTheThreadStopped.set();
};
}
};
@@ -238,8 +238,7 @@ DataStream::DataStream(ScDocShell *pShell, const OUString& rURL, const ScRange&
DataStream::~DataStream()
{
- if (mbRunning)
- Stop();
+ Stop();
mxThread->mbTerminate = true;
mxThread->maStart.set();
mxThread->join();
@@ -309,6 +308,8 @@ void DataStream::Stop()
if (!mbRunning)
return;
mbRunning = false;
+ SolarMutexReleaser aAllowTheThreadToStop;
+ maMakeSureTheThreadStopped.wait();
mpScDocument->EnableUndo(mbIsUndoEnabled);
}
@@ -397,6 +398,12 @@ bool DataStream::ImportData()
return mbRunning;
}
+void DataStream::Closed()
+{
+ Stop();
+ SvBaseLink::Closed();
+}
+
sfx2::SvBaseLink::UpdateResult DataStream::DataChanged(
const OUString& , const css::uno::Any& )
{
diff --git a/sc/source/ui/inc/datastream.hxx b/sc/source/ui/inc/datastream.hxx
index 9dd7cb7..ec355fa 100644
--- a/sc/source/ui/inc/datastream.hxx
+++ b/sc/source/ui/inc/datastream.hxx
@@ -9,6 +9,7 @@
#include <sal/config.h>
+#include <osl/conditn.hxx>
#include <rtl/ref.hxx>
#include <rtl/ustring.hxx>
#include <sfx2/lnkbase.hxx>
@@ -37,6 +38,7 @@ class DataStream : boost::noncopyable, public sfx2::SvBaseLink
public:
enum MoveEnum { NO_MOVE, RANGE_DOWN, MOVE_DOWN, MOVE_UP };
enum { SCRIPT_STREAM = 1, VALUES_IN_LINE = 2 };
+ osl::Condition maMakeSureTheThreadStopped;
static void MakeToolbarVisible(ScDocShell *pShell);
static void Set(ScDocShell *pShell, const OUString& rURL, const OUString& rRange,
@@ -45,6 +47,7 @@ public:
DataStream(ScDocShell *pShell, const OUString& rURL, const ScRange& rRange,
sal_Int32 nLimit, const OUString& rMove, sal_uInt32 nSettings);
virtual ~DataStream() SAL_OVERRIDE;
+ virtual void Closed() SAL_OVERRIDE;
virtual sfx2::SvBaseLink::UpdateResult DataChanged(
const OUString& , const css::uno::Any& ) SAL_OVERRIDE;
virtual void Edit(Window* , const Link& ) SAL_OVERRIDE;
More information about the Libreoffice-commits
mailing list