summaryrefslogtreecommitdiff
path: root/editeng
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2016-05-24 11:02:42 +0200
committerNoel Grandin <noel@peralex.com>2016-05-24 11:02:42 +0200
commit95d20a3799998b9816bd2e8aebdbc96c61cead3e (patch)
tree8206ecc848631432cb8b027d5e780483734f808a /editeng
parent3caf31b05d7bbf3d50a1bbda6c8b95982cb5c2b5 (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.hxx2
-rw-r--r--editeng/source/xml/xmltxtexp.cxx34
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();
}