85467e7cb9
If the document loading is long enough that the statusbar is updated,
then we can have this situation that we start loading the document, then
spin the main loop during load and do a second load of the same document
as part of the main loop spinning:
#0 SwDoc::SwDoc() (this=0x1c6a180) at sw/source/core/doc/docnew.cxx:194
...
#6 0x00007ffff359a6dd in SfxBaseModel::load(com::sun:⭐:uno::Sequence<com::sun:⭐🫘:PropertyValue> const&) (this=0x1c5c260, seqArguments=uno::Sequence of length 15 = {...})
...
#33 0x00007fffeeb81ecd in Application::Reschedule(bool) (i_bAllEvents=true) at vcl/source/app/svapp.cxx:460
...
#36 0x00007ffff4265251 in framework::StatusIndicator::start(rtl::OUString const&, int) (this=0x1aace80, sText="Loading document...", nRange=1000000) at framework/source/helper/statusindicator.cxx:51
#37 0x00007fffd026dfd3 in XMLReader::Read(SwDoc&, rtl::OUString const&, SwPaM&, rtl::OUString const&) (this=0x1bb7d20, rDoc=..., rBaseURL="file:///.../test.odt", rPaM=SwPaM = {...}, rName="") at sw/source/filter/xml/swxml.cxx:630
...
#42 0x00007ffff359a6dd in SfxBaseModel::load(com::sun:⭐:uno::Sequence<com::sun:⭐🫘:PropertyValue> const&) (this=0x1bce4d0, seqArguments=uno::Sequence of length 15 = {...}) at sfx2/source/doc/sfxbasemodel.cxx:1883
The reason for this is is that by the time
LoadEnv::impl_searchAlreadyLoaded() searches for frames which already
have this doc open, the first load is still in progress, and we
assiciate the frame with its controller (which has the URL) only once
the load finishes.
Fix the problem by setting the URL on the frame directly for the
duration of the load: this way an in-progress load also counts as a
duplicate and we'll have just one document open at the end.
Regression from commit 74ac65c49c
(#i114963# Enable IPC before OpenClients to allow client connections
when printing., 2016-09-06), we just didn't process incoming requests on
the socket before, so the problem was less visible.
Change-Id: Ib138c4c264e2508c20104ab268501bcca31e2790
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104310
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
40 lines
1.1 KiB
Makefile
40 lines
1.1 KiB
Makefile
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
|
|
#
|
|
# This file is part of the LibreOffice project.
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
|
|
$(eval $(call gb_CppunitTest_CppunitTest,framework_loadenv))
|
|
|
|
$(eval $(call gb_CppunitTest_add_exception_objects,framework_loadenv, \
|
|
framework/qa/cppunit/loadenv \
|
|
))
|
|
|
|
$(eval $(call gb_CppunitTest_use_sdk_api,framework_loadenv))
|
|
|
|
$(eval $(call gb_CppunitTest_use_libraries,framework_loadenv, \
|
|
comphelper \
|
|
cppu \
|
|
cppuhelper \
|
|
sal \
|
|
salhelper \
|
|
test \
|
|
unotest \
|
|
vcl \
|
|
))
|
|
|
|
$(eval $(call gb_CppunitTest_use_external,framework_loadenv,boost_headers))
|
|
|
|
$(eval $(call gb_CppunitTest_use_sdk_api,framework_loadenv))
|
|
|
|
$(eval $(call gb_CppunitTest_use_ure,framework_loadenv))
|
|
$(eval $(call gb_CppunitTest_use_vcl,framework_loadenv))
|
|
|
|
$(eval $(call gb_CppunitTest_use_rdb,framework_loadenv,services))
|
|
|
|
$(eval $(call gb_CppunitTest_use_configuration,framework_loadenv))
|
|
|
|
# vim: set noet sw=4 ts=4:
|