sc/inc/datamapper.hxx | 2 +- sc/source/ui/dataprovider/csvdataprovider.cxx | 7 +++++++ sc/source/ui/dataprovider/dataprovider.cxx | 15 ++++++++++++++- sc/source/ui/inc/dataprovider.hxx | 9 +++++++++ 4 files changed, 31 insertions(+), 2 deletions(-)
New commits: commit e07bf6aadb301407add5d4c6fff73b3be8bd63a2 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Aug 12 19:11:02 2017 +0200 external data: avoid deadlock when the thread needs the SolarMutex Change-Id: I222f2031dbd55515db63b1360c8248ec24e6c89d Reviewed-on: https://gerrit.libreoffice.org/41092 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/source/ui/dataprovider/csvdataprovider.cxx b/sc/source/ui/dataprovider/csvdataprovider.cxx index 4e2aea9cffa9..24450e0d4349 100644 --- a/sc/source/ui/dataprovider/csvdataprovider.cxx +++ b/sc/source/ui/dataprovider/csvdataprovider.cxx @@ -188,6 +188,7 @@ CSVDataProvider::~CSVDataProvider() { if (mxCSVFetchThread.is()) { + SolarMutexReleaser aReleaser; mxCSVFetchThread->join(); } } commit 32708687dbb496e6b8d74c806126f0f28a3ac2a2 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Aug 12 19:10:26 2017 +0200 external data: introduce a deterministic mode for the tests Change-Id: I5804800216bd7d22b89a4e54d3f46cc3520f7c42 Reviewed-on: https://gerrit.libreoffice.org/41091 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/inc/datamapper.hxx b/sc/inc/datamapper.hxx index b8216b0de0de..55390fc5a39b 100644 --- a/sc/inc/datamapper.hxx +++ b/sc/inc/datamapper.hxx @@ -87,7 +87,7 @@ public: OUString getDBName() const; void setDBData(ScDBData* pDBData); - void refresh(ScDocument* pDoc); + void refresh(ScDocument* pDoc, bool bDeterministic = false); }; class SC_DLLPUBLIC ExternalDataMapper diff --git a/sc/source/ui/dataprovider/csvdataprovider.cxx b/sc/source/ui/dataprovider/csvdataprovider.cxx index cd87d21c3de4..4e2aea9cffa9 100644 --- a/sc/source/ui/dataprovider/csvdataprovider.cxx +++ b/sc/source/ui/dataprovider/csvdataprovider.cxx @@ -202,6 +202,12 @@ void CSVDataProvider::Import() mpDoc->ResetClip(mpDocument, (SCTAB)0); mxCSVFetchThread = new CSVFetchThread(*mpDoc, maURL, &maIdle); mxCSVFetchThread->launch(); + + if (mbDeterministic) + { + SolarMutexReleaser aReleaser; + mxCSVFetchThread->join(); + } } IMPL_LINK_NOARG(CSVDataProvider, ImportFinishedHdl, Timer*, void) diff --git a/sc/source/ui/dataprovider/dataprovider.cxx b/sc/source/ui/dataprovider/dataprovider.cxx index 119dbdd18e9b..79b936f5d704 100644 --- a/sc/source/ui/dataprovider/dataprovider.cxx +++ b/sc/source/ui/dataprovider/dataprovider.cxx @@ -107,7 +107,7 @@ double ExternalDataSource::getUpdateFrequency() const return mnUpdateFrequency; } -void ExternalDataSource::refresh(ScDocument* pDoc) +void ExternalDataSource::refresh(ScDocument* pDoc, bool bDeterministic) { // no DB data available if (!mpDBDataManager) @@ -121,6 +121,9 @@ void ExternalDataSource::refresh(ScDocument* pDoc) if (!mpDataProvider) return; + if (bDeterministic) + mpDataProvider->setDeterministic(); + mpDataProvider->Import(); } @@ -148,6 +151,16 @@ std::vector<sc::ExternalDataSource>& ExternalDataMapper::getDataSources() return maDataSources; } +DataProvider::DataProvider(): + mbDeterministic(false) +{ +} + +void DataProvider::setDeterministic() +{ + mbDeterministic = true; +} + DataProvider::~DataProvider() { } diff --git a/sc/source/ui/inc/dataprovider.hxx b/sc/source/ui/inc/dataprovider.hxx index 00fec69638fb..c45adc9616a1 100644 --- a/sc/source/ui/inc/dataprovider.hxx +++ b/sc/source/ui/inc/dataprovider.hxx @@ -76,7 +76,14 @@ public: */ class DataProvider { +protected: + /** + * If true make the threaded import deterministic for the tests. + */ + bool mbDeterministic; + public: + DataProvider(); virtual ~DataProvider() = 0; virtual void Import() = 0; @@ -84,6 +91,8 @@ public: virtual const OUString& GetURL() const = 0; static std::unique_ptr<SvStream> FetchStreamFromURL(const OUString&, OStringBuffer& rBuffer); + + void setDeterministic(); }; class CSVDataProvider : public DataProvider _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits