toolkit/source/awt/asynccallback.cxx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
New commits: commit fd42457d52b68c60f2cbbd518648044821bb13c9 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Tue Nov 15 15:36:20 2016 +0100 tdf#103852 avoid clipboard deadlock Change-Id: If0c5f01d0aefd2444781612d47d8145b4869f3a1 diff --git a/dtrans/source/win32/dtobj/XTDataObject.cxx b/dtrans/source/win32/dtobj/XTDataObject.cxx index 51108a1..ad1c9f0 100644 --- a/dtrans/source/win32/dtobj/XTDataObject.cxx +++ b/dtrans/source/win32/dtobj/XTDataObject.cxx @@ -25,8 +25,11 @@ #include "DTransHelper.hxx" #include "TxtCnvtHlp.hxx" #include <com/sun/star/datatransfer/clipboard/XClipboardEx.hpp> +#include "com/sun/star/awt/AsyncCallback.hpp" +#include "com/sun/star/awt/XCallback.hpp" #include "FmtFilter.hxx" #include <comphelper/processfactory.hxx> +#include <cppuhelper/implbase.hxx> #if defined _MSC_VER #pragma warning(push,1) @@ -52,6 +55,22 @@ using namespace com::sun::star::datatransfer::clipboard; using namespace com::sun::star::uno; using namespace com::sun::star::lang; + +class AsyncDereference : public cppu::WeakImplHelper<css::awt::XCallback> +{ + Reference<XTransferable> maTransferable; +public: + AsyncDereference(css::uno::Reference<css::datatransfer::XTransferable> const & rTransferable) + : maTransferable(rTransferable) + {} + + virtual void SAL_CALL notify(css::uno::Any const &) + throw (css::uno::RuntimeException, std::exception) override + { + maTransferable.set(nullptr); + } +}; + // a helper class that will be thrown by the function validateFormatEtc class CInvalidFormatEtcException @@ -67,12 +86,20 @@ CXTDataObject::CXTDataObject( const Reference< XComponentContext >& rxContext, const Reference< XTransferable >& aXTransferable ) : m_nRefCnt( 0 ) , m_XTransferable( aXTransferable ) + , m_XComponentContext( rxContext ) , m_bFormatEtcContainerInitialized( sal_False ) , m_DataFormatTranslator( rxContext ) , m_FormatRegistrar( rxContext, m_DataFormatTranslator ) { } +CXTDataObject::~CXTDataObject() +{ + css::awt::AsyncCallback::create(m_XComponentContext)->addCallback( + new AsyncDereference(m_XTransferable), + css::uno::Any()); +} + // IUnknown->QueryInterface STDMETHODIMP CXTDataObject::QueryInterface( REFIID iid, LPVOID* ppvObject ) diff --git a/dtrans/source/win32/dtobj/XTDataObject.hxx b/dtrans/source/win32/dtobj/XTDataObject.hxx index 3d8d71c..f9e98e8 100644 --- a/dtrans/source/win32/dtobj/XTDataObject.hxx +++ b/dtrans/source/win32/dtobj/XTDataObject.hxx @@ -64,7 +64,7 @@ class CXTDataObject : public IDataObject public: CXTDataObject( const css::uno::Reference< css::uno::XComponentContext >& rxContext, const css::uno::Reference< css::datatransfer::XTransferable >& aXTransferable ); - virtual ~CXTDataObject() {} + virtual ~CXTDataObject(); // ole interface implementation @@ -118,6 +118,7 @@ private: private: LONG m_nRefCnt; css::uno::Reference< css::datatransfer::XTransferable > m_XTransferable; + css::uno::Reference< css::uno::XComponentContext> m_XComponentContext; CFormatEtcContainer m_FormatEtcContainer; sal_Bool m_bFormatEtcContainerInitialized; CDataFormatTranslator m_DataFormatTranslator; diff --git a/toolkit/source/awt/asynccallback.cxx b/toolkit/source/awt/asynccallback.cxx index 2d30afe..9268cb5 100644 --- a/toolkit/source/awt/asynccallback.cxx +++ b/toolkit/source/awt/asynccallback.cxx @@ -88,8 +88,7 @@ void SAL_CALL AsyncCallback::addCallback(const css::uno::Reference< css::awt::XC { if ( Application::IsInMain() ) { - SolarMutexGuard aSolarGuard; - + // NOTE: We don't need SolarMutexGuard here as Application::PostUserEvent is thread-safe CallbackData* pCallbackData = new CallbackData( xCallback, aData ); Application::PostUserEvent( LINK( this, AsyncCallback, Notify_Impl ), pCallbackData ); } commit 5ae93e993a5a477506e9ac47f5f7658c5c879634 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> Date: Sun Nov 20 21:37:17 2016 +0100 Revert "tdf#103852 avoid clipboard deadlock" This reverts commit 5e2cc924ef24c6977efbd576971c94a951e38ed4. diff --git a/dtrans/source/win32/dtobj/XTDataObject.cxx b/dtrans/source/win32/dtobj/XTDataObject.cxx index ad1c9f0..51108a1 100644 --- a/dtrans/source/win32/dtobj/XTDataObject.cxx +++ b/dtrans/source/win32/dtobj/XTDataObject.cxx @@ -25,11 +25,8 @@ #include "DTransHelper.hxx" #include "TxtCnvtHlp.hxx" #include <com/sun/star/datatransfer/clipboard/XClipboardEx.hpp> -#include "com/sun/star/awt/AsyncCallback.hpp" -#include "com/sun/star/awt/XCallback.hpp" #include "FmtFilter.hxx" #include <comphelper/processfactory.hxx> -#include <cppuhelper/implbase.hxx> #if defined _MSC_VER #pragma warning(push,1) @@ -55,22 +52,6 @@ using namespace com::sun::star::datatransfer::clipboard; using namespace com::sun::star::uno; using namespace com::sun::star::lang; - -class AsyncDereference : public cppu::WeakImplHelper<css::awt::XCallback> -{ - Reference<XTransferable> maTransferable; -public: - AsyncDereference(css::uno::Reference<css::datatransfer::XTransferable> const & rTransferable) - : maTransferable(rTransferable) - {} - - virtual void SAL_CALL notify(css::uno::Any const &) - throw (css::uno::RuntimeException, std::exception) override - { - maTransferable.set(nullptr); - } -}; - // a helper class that will be thrown by the function validateFormatEtc class CInvalidFormatEtcException @@ -86,20 +67,12 @@ CXTDataObject::CXTDataObject( const Reference< XComponentContext >& rxContext, const Reference< XTransferable >& aXTransferable ) : m_nRefCnt( 0 ) , m_XTransferable( aXTransferable ) - , m_XComponentContext( rxContext ) , m_bFormatEtcContainerInitialized( sal_False ) , m_DataFormatTranslator( rxContext ) , m_FormatRegistrar( rxContext, m_DataFormatTranslator ) { } -CXTDataObject::~CXTDataObject() -{ - css::awt::AsyncCallback::create(m_XComponentContext)->addCallback( - new AsyncDereference(m_XTransferable), - css::uno::Any()); -} - // IUnknown->QueryInterface STDMETHODIMP CXTDataObject::QueryInterface( REFIID iid, LPVOID* ppvObject ) diff --git a/dtrans/source/win32/dtobj/XTDataObject.hxx b/dtrans/source/win32/dtobj/XTDataObject.hxx index f9e98e8..3d8d71c 100644 --- a/dtrans/source/win32/dtobj/XTDataObject.hxx +++ b/dtrans/source/win32/dtobj/XTDataObject.hxx @@ -64,7 +64,7 @@ class CXTDataObject : public IDataObject public: CXTDataObject( const css::uno::Reference< css::uno::XComponentContext >& rxContext, const css::uno::Reference< css::datatransfer::XTransferable >& aXTransferable ); - virtual ~CXTDataObject(); + virtual ~CXTDataObject() {} // ole interface implementation @@ -118,7 +118,6 @@ private: private: LONG m_nRefCnt; css::uno::Reference< css::datatransfer::XTransferable > m_XTransferable; - css::uno::Reference< css::uno::XComponentContext> m_XComponentContext; CFormatEtcContainer m_FormatEtcContainer; sal_Bool m_bFormatEtcContainerInitialized; CDataFormatTranslator m_DataFormatTranslator;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits