diff options
author | Noel Grandin <noel@peralex.com> | 2016-05-24 11:02:42 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2016-05-24 11:02:42 +0200 |
commit | 95d20a3799998b9816bd2e8aebdbc96c61cead3e (patch) | |
tree | 8206ecc848631432cb8b027d5e780483734f808a /editeng | |
parent | 3caf31b05d7bbf3d50a1bbda6c8b95982cb5c2b5 (diff) |
Revert "remove some manual ref-counting"
until I have a better understanding of the UNO reference
counting.
This reverts commit 111de438ea3e512a541281dc0716cc728ea8d152.
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/source/xml/editsource.hxx | 2 | ||||
-rw-r--r-- | editeng/source/xml/xmltxtexp.cxx | 34 |
2 files changed, 28 insertions, 8 deletions
diff --git a/editeng/source/xml/editsource.hxx b/editeng/source/xml/editsource.hxx index a22728f34e4b..4b49838448ad 100644 --- a/editeng/source/xml/editsource.hxx +++ b/editeng/source/xml/editsource.hxx @@ -38,7 +38,7 @@ public: private: explicit SvxEditEngineSource( SvxEditEngineSourceImpl* pImpl ); - rtl::Reference<SvxEditEngineSourceImpl> mxImpl; + SvxEditEngineSourceImpl* mpImpl; }; #endif diff --git a/editeng/source/xml/xmltxtexp.cxx b/editeng/source/xml/xmltxtexp.cxx index 6535b6505603..28e4f497ed8e 100644 --- a/editeng/source/xml/xmltxtexp.cxx +++ b/editeng/source/xml/xmltxtexp.cxx @@ -59,22 +59,28 @@ using namespace cppu; class SvxEditEngineSourceImpl; -class SvxEditEngineSourceImpl : public salhelper::SimpleReferenceObject +class SvxEditEngineSourceImpl { private: + oslInterlockedCount maRefCount; + EditEngine* mpEditEngine; SvxTextForwarder* mpTextForwarder; - virtual ~SvxEditEngineSourceImpl(); + ~SvxEditEngineSourceImpl(); public: explicit SvxEditEngineSourceImpl( EditEngine* pEditEngine ); + void SAL_CALL acquire(); + void SAL_CALL release(); + SvxTextForwarder* GetTextForwarder(); }; SvxEditEngineSourceImpl::SvxEditEngineSourceImpl( EditEngine* pEditEngine ) -: mpEditEngine( pEditEngine ), +: maRefCount(0), + mpEditEngine( pEditEngine ), mpTextForwarder(nullptr) { } @@ -84,6 +90,17 @@ SvxEditEngineSourceImpl::~SvxEditEngineSourceImpl() delete mpTextForwarder; } +void SAL_CALL SvxEditEngineSourceImpl::acquire() +{ + osl_atomic_increment( &maRefCount ); +} + +void SAL_CALL SvxEditEngineSourceImpl::release() +{ + if( ! osl_atomic_decrement( &maRefCount ) ) + delete this; +} + SvxTextForwarder* SvxEditEngineSourceImpl::GetTextForwarder() { if (!mpTextForwarder) @@ -94,27 +111,30 @@ SvxTextForwarder* SvxEditEngineSourceImpl::GetTextForwarder() // SvxTextEditSource SvxEditEngineSource::SvxEditEngineSource( EditEngine* pEditEngine ) - : mxImpl( new SvxEditEngineSourceImpl( pEditEngine ) ) { + mpImpl = new SvxEditEngineSourceImpl( pEditEngine ); + mpImpl->acquire(); } SvxEditEngineSource::SvxEditEngineSource( SvxEditEngineSourceImpl* pImpl ) - : mxImpl(pImpl) { + mpImpl = pImpl; + mpImpl->acquire(); } SvxEditEngineSource::~SvxEditEngineSource() { + mpImpl->release(); } SvxEditSource* SvxEditEngineSource::Clone() const { - return new SvxEditEngineSource( mxImpl.get() ); + return new SvxEditEngineSource( mpImpl ); } SvxTextForwarder* SvxEditEngineSource::GetTextForwarder() { - return mxImpl->GetTextForwarder(); + return mpImpl->GetTextForwarder(); } |