summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-06-05 22:15:23 +0200
committerStephan Bergmann <sbergman@redhat.com>2014-06-05 22:16:59 +0200
commitf7fac105102c6df21242dc30ee7174aee6507bb3 (patch)
tree25d0698f1a5f77c2b3323ba3491dbf02538e785c
parent416367380cbb0137f2463edc2773859a9d65a57b (diff)
...which empirically shows that LateInitThread is useless
Change-Id: Ic2946eef616eae39576d162ca534831753bd3c89
-rw-r--r--filter/Library_filterconfig.mk2
-rw-r--r--filter/source/config/cache/filtercache.cxx16
-rw-r--r--filter/source/config/cache/filtercache.hxx21
-rw-r--r--filter/source/config/cache/lateinitlistener.cxx126
-rw-r--r--filter/source/config/cache/lateinitlistener.hxx111
-rw-r--r--filter/source/config/cache/lateinitthread.cxx49
-rw-r--r--filter/source/config/cache/lateinitthread.hxx53
7 files changed, 2 insertions, 376 deletions
diff --git a/filter/Library_filterconfig.mk b/filter/Library_filterconfig.mk
index ce4475b44c3d..602d2b17aa70 100644
--- a/filter/Library_filterconfig.mk
+++ b/filter/Library_filterconfig.mk
@@ -55,8 +55,6 @@ $(eval $(call gb_Library_add_exception_objects,filterconfig,\
filter/source/config/cache/filtercache \
filter/source/config/cache/filterfactory \
filter/source/config/cache/frameloaderfactory \
- filter/source/config/cache/lateinitlistener \
- filter/source/config/cache/lateinitthread \
filter/source/config/cache/querytokenizer \
filter/source/config/cache/registration \
filter/source/config/cache/typedetection \
diff --git a/filter/source/config/cache/filtercache.cxx b/filter/source/config/cache/filtercache.cxx
index 92fced420c29..e9ac3ed81950 100644
--- a/filter/source/config/cache/filtercache.cxx
+++ b/filter/source/config/cache/filtercache.cxx
@@ -19,7 +19,6 @@
#include "filtercache.hxx"
-#include "lateinitlistener.hxx"
#include "macros.hxx"
#include "constant.hxx"
#include "cacheupdatelistener.hxx"
@@ -156,18 +155,12 @@ void FilterCache::takeOver(const FilterCache& rClone)
-void FilterCache::load(EFillState eRequired,
- sal_Bool bByThread
-)
+void FilterCache::load(EFillState eRequired)
throw(css::uno::Exception)
{
// SAFE -> ----------------------------------
::osl::ResettableMutexGuard aLock(m_aLock);
- SAL_WARN_IF(
- bByThread && (eRequired & ~m_eFillState) == 0, "filter.config",
- "useless LateInitThread");
-
// check if required fill state is already reached ...
// There is nothing to do then.
if ((m_eFillState & eRequired) == eRequired)
@@ -193,13 +186,6 @@ void FilterCache::load(EFillState eRequired,
// Support the old configuration support. Read it only one times during office runtime!
impl_readOldFormat();
-
- // enable "loadOnDemand" feature ...
- // Create uno listener, which waits for finishing the office startup
- // and starts a thread, which calls loadAll() at this filter cache.
- // Note: Its not a leak to create this listener with new here.
- // It kills itself after working!
- /* LateInitListener* pLateInit = */ new LateInitListener(comphelper::getProcessComponentContext());
}
diff --git a/filter/source/config/cache/filtercache.hxx b/filter/source/config/cache/filtercache.hxx
index 2e82ccff3405..33efef10afd1 100644
--- a/filter/source/config/cache/filtercache.hxx
+++ b/filter/source/config/cache/filtercache.hxx
@@ -314,32 +314,13 @@ class FilterCache : public BaseLock
This method must be called from every user of this cache
every time it needs a filled cache. Normally we load
only standard information into this cache on startup.
- After a few seconds we start a special thread, which
- may fill this cache completely. But if someone outside
- needs a filled cache before ... it can run into trouble,
- if this "load-on-demand" thread does not finished its work before.
- This method "load(xxx)" synchronize such load-on-demand requests.
-
- Of course it would be possible to supress this special load thread
- in general and start it manually inside this load() request.
- The outside code decide then, if and when this cache will be filled
- with all available information ...
-
- @param bByThread
- indicates using of this method by our global "load-on-demand-thread".
- Its an implementation detail! We use it to check, if this "load()"
- request was forced e.g. by one of our derived service container (which need
- it to full fill its own operations) or if it was forced by our own
- "load-on-demand-thread", which tries to optimize our startup performance
- and start this load() only in case the office startup was already finished!
@throw An exception if the cache could not be filled really
or seems to be invalid afterwards. But there is no reaction
at all if this method does nothing inside, because the cache
is already full filled!
*/
- virtual void load(EFillState eRequired ,
- sal_Bool bByThread = sal_False)
+ virtual void load(EFillState eRequired)
throw(css::uno::Exception);
diff --git a/filter/source/config/cache/lateinitlistener.cxx b/filter/source/config/cache/lateinitlistener.cxx
deleted file mode 100644
index d05fb7df846b..000000000000
--- a/filter/source/config/cache/lateinitlistener.cxx
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "sal/config.h"
-
-#include "rtl/ref.hxx"
-#include "rtl/ustring.hxx"
-
-#include "lateinitlistener.hxx"
-#include "lateinitthread.hxx"
-
-#include <com/sun/star/frame/theGlobalEventBroadcaster.hpp>
-
-
-namespace filter{
- namespace config{
-
-LateInitListener::LateInitListener(const css::uno::Reference< css::uno::XComponentContext >& rxContext)
- : BaseLock( )
-{
- // important to do so ...
- // Otherwise the temp. reference to ourselves
- // will kill us at releasing time!
- osl_atomic_increment( &m_refCount );
-
- m_xBroadcaster = css::uno::Reference< css::document::XEventBroadcaster >(
- css::frame::theGlobalEventBroadcaster::get(rxContext),
- css::uno::UNO_QUERY_THROW);
-
- m_xBroadcaster->addEventListener(static_cast< css::document::XEventListener* >(this));
-
- osl_atomic_decrement( &m_refCount );
-}
-
-
-
-LateInitListener::~LateInitListener()
-{
-}
-
-
-
-void SAL_CALL LateInitListener::notifyEvent(const css::document::EventObject& aEvent)
- throw(css::uno::RuntimeException, std::exception)
-{
- // wait for events which either
- // a) indicate completed open of the first document in which case launch thread
- // b) indicate close of application without any documents opened, in which case skip launching thread but drop references break cyclic dependencies in
- // case of e.g. cancel from open/new database wizard or impress wizard
- if ( aEvent.EventName == "OnNew" || aEvent.EventName == "OnLoad" || aEvent.EventName == "OnCloseApp" )
- {
- // this thread must be started one times only ...
- // cancel listener connection before!
-
- // SAFE ->
- ::osl::ResettableMutexGuard aLock(m_aLock);
-
- if ( !m_xBroadcaster.is() )
- // the beauty of multi-threading ... OnLoad can be notified synchronously or asynchronously. In particular,
- // SFX-based documents notify it synchronously, database documents do it asynchronously.
- // Now if multiple documents are opened "at the same time", it is well possible that we get two events from
- // different threads, where upon the first event, we already remove ourself from m_xBroadcaster, and start
- // the thread, nonetheless there's also a second notification "in the queue", which will arrive short
- // thereafter.
- // In such a case, simply ignore this second event.
- return;
-
- m_xBroadcaster->removeEventListener(static_cast< css::document::XEventListener* >(this));
- m_xBroadcaster.clear();
-
- aLock.clear();
- // <- SAFE
-
- if ( aEvent.EventName != "OnCloseApp" )
- {
- rtl::Reference< LateInitThread >(new LateInitThread())->launch();
- //TODO: a protocol is missing how to join with the launched
- // thread before exit(3), to ensure the thread is no longer
- // relying on any infrastructure while that infrastructure is
- // being shut down in atexit handlers
- }
- }
-}
-
-
-
-void SAL_CALL LateInitListener::disposing(const css::lang::EventObject& /* aEvent */ )
- throw(css::uno::RuntimeException, std::exception)
-{
- // ???
- // Normaly it should never be called. Because we cancel our listener connection
- // if we got the event about finished open of the first office document.
- // But if this method was reached, it indicates an office, which was started
- // (might as remote script container for an external API client) but not really used.
-
- // SAFE ->
- ::osl::ResettableMutexGuard aLock(m_aLock);
- if ( !m_xBroadcaster.is() )
- return;
-
- m_xBroadcaster->removeEventListener(static_cast< css::document::XEventListener* >(this));
- m_xBroadcaster.clear();
- aLock.clear();
- // <- SAFE
-}
-
- } // namespace config
-} // namespace filter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/filter/source/config/cache/lateinitlistener.hxx b/filter/source/config/cache/lateinitlistener.hxx
deleted file mode 100644
index 79ac33f175f3..000000000000
--- a/filter/source/config/cache/lateinitlistener.hxx
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_FILTER_SOURCE_CONFIG_CACHE_LATEINITLISTENER_HXX
-#define INCLUDED_FILTER_SOURCE_CONFIG_CACHE_LATEINITLISTENER_HXX
-
-#include "cacheitem.hxx"
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XEventListener.hpp>
-#include <com/sun/star/document/XEventListener.hpp>
-#include <com/sun/star/document/XEventBroadcaster.hpp>
-#include <cppuhelper/implbase1.hxx>
-
-namespace com { namespace sun { namespace star { namespace uno {
- class XComponentContext;
-} } } }
-
-namespace filter{
- namespace config{
-
-
-
-
-/** @short implements a listener, which will update the
- global filter cache of an office, after zje office
- startup was finished.
-
- @descr To perform startup of an office, the filter cache starts
- with a minimum set of properties only. After the first document
- was loaded successfully a thread will be started to fill the
- cache with all other proeprties, so it can work with the whole
- filter configuration.
- */
-class LateInitListener : public BaseLock // must be the first one to guarantee right initialized mutex member!
- , public ::cppu::WeakImplHelper1< css::document::XEventListener >
-{
-
- // member
-
- private:
-
- /** @short reference to the global event broadcaster, which is usde to find
- out, when the first office document was opened successfully. */
- css::uno::Reference< css::document::XEventBroadcaster > m_xBroadcaster;
-
-
- // native interface
-
- public:
-
-
- // ctor/dtor
-
- /** @short initialize new instance of this class.
-
- @descr It set a reference to the global filter cache singleton,
- which should be updated here. Further it starts listening
- on the global event broadcaster to get the information, when
- loading of the first document was finished.
-
- @param rxContext
- reference to a component context, which can be used to create
- own needed uno services.
- */
- LateInitListener(const css::uno::Reference< css::uno::XComponentContext >& rxContext);
-
-
-
- /** @short standard dtor.
- */
- virtual ~LateInitListener();
-
-
- // uno interface
-
- public:
-
-
- // document.XEventListener
-
- virtual void SAL_CALL notifyEvent(const css::document::EventObject& aEvent)
- throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
-
-
- // lang.XEventListener
- virtual void SAL_CALL disposing(const css::lang::EventObject& aEvent)
- throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
-};
-
- } // namespace config
-} // namespace filter
-
-#endif // INCLUDED_FILTER_SOURCE_CONFIG_CACHE_LATEINITLISTENER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/filter/source/config/cache/lateinitthread.cxx b/filter/source/config/cache/lateinitthread.cxx
deleted file mode 100644
index 744ca5e19ae8..000000000000
--- a/filter/source/config/cache/lateinitthread.cxx
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "sal/config.h"
-
-#include "salhelper/singletonref.hxx"
-
-#include "filtercache.hxx"
-#include "lateinitthread.hxx"
-
-namespace filter { namespace config {
-
-LateInitThread::LateInitThread(): Thread("lateinitthread") {}
-
-LateInitThread::~LateInitThread() {}
-
-void LateInitThread::execute() {
- // true => It indicates using of this method by this thread
- // The filter cache use this information to show an assertion
- // for "optimization failure" in case the first calli of loadAll()
- // was not this thread ...
-
- // Further please dont catch any exception here.
- // May be they show the problem of a corrupted filter
- // configuration, which is handled inside our event loop or desktop.main()!
-
- salhelper::SingletonRef< FilterCache >()->load(
- FilterCache::E_CONTAINS_ALL, true);
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/filter/source/config/cache/lateinitthread.hxx b/filter/source/config/cache/lateinitthread.hxx
deleted file mode 100644
index 4b560faf077b..000000000000
--- a/filter/source/config/cache/lateinitthread.hxx
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * 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/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_FILTER_SOURCE_CONFIG_CACHE_LATEINITTHREAD_HXX
-#define INCLUDED_FILTER_SOURCE_CONFIG_CACHE_LATEINITTHREAD_HXX
-
-#include "sal/config.h"
-
-#include "salhelper/thread.hxx"
-
-namespace filter{ namespace config {
-
-/** @short implements a thread, which will update the
- global filter cache of an office, after its
- startup was finished.
-
- @descr Its started by a LateInitListener instance ...
-
- @see LateInitListener
-
- @attention The filter cache will be blocked during this thrad runs!
- */
-class LateInitThread: public salhelper::Thread {
-public:
- LateInitThread();
-
-private:
- virtual ~LateInitThread();
-
- virtual void execute() SAL_OVERRIDE;
-};
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */