summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/GCShared.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2004-11-25 04:18:34 +0000
committerMichi Henning <michi@zeroc.com>2004-11-25 04:18:34 +0000
commitcaa0420fca74674bf5d3862919da69cf90204b1f (patch)
tree842ef072c18f99250bf613cbcfefbac510e26261 /cpp/src/IceUtil/GCShared.cpp
parentImproved test (diff)
downloadice-caa0420fca74674bf5d3862919da69cf90204b1f.tar.bz2
ice-caa0420fca74674bf5d3862919da69cf90204b1f.tar.xz
ice-caa0420fca74674bf5d3862919da69cf90204b1f.zip
Changed IceUtil::GCShared to derive from IceUtil::Shared.
Diffstat (limited to 'cpp/src/IceUtil/GCShared.cpp')
-rw-r--r--cpp/src/IceUtil/GCShared.cpp34
1 files changed, 10 insertions, 24 deletions
diff --git a/cpp/src/IceUtil/GCShared.cpp b/cpp/src/IceUtil/GCShared.cpp
index 06706a84060..da874c1c2c9 100644
--- a/cpp/src/IceUtil/GCShared.cpp
+++ b/cpp/src/IceUtil/GCShared.cpp
@@ -22,8 +22,7 @@ void
IceUtil::GCShared::__incRef()
{
gcRecMutex._m->lock();
- assert(_ref >= 0);
- ++_ref;
+ __incRefUnsafe();
gcRecMutex._m->unlock();
}
@@ -31,9 +30,16 @@ void
IceUtil::GCShared::__decRef()
{
gcRecMutex._m->lock();
+
bool doDelete = false;
- assert(_ref > 0);
- if(--_ref == 0)
+
+#if defined(_WIN32)
+ if(InterlockedDecrement(&_ref) == 0)
+#elif defined(ICE_HAS_ATOMIC_FUNCTIONS)
+ if(ice_atomic_dec_and_test(&_ref))
+#else
+ if(--ref == 0)
+#endif
{
doDelete = !_noDelete;
_noDelete = true;
@@ -46,15 +52,6 @@ IceUtil::GCShared::__decRef()
}
}
-int
-IceUtil::GCShared::__getRef() const
-{
- gcRecMutex._m->lock();
- int ref = _ref;
- gcRecMutex._m->unlock();
- return ref;
-}
-
void
IceUtil::GCShared::__setNoDelete(bool b)
{
@@ -62,14 +59,3 @@ IceUtil::GCShared::__setNoDelete(bool b)
_noDelete = b;
gcRecMutex._m->unlock();
}
-
-void
-IceUtil::GCShared::__addObject(GCObjectMultiSet& c, GCShared* p)
-{
- gcRecMutex._m->lock();
- if(p)
- {
- c.insert(p);
- }
- gcRecMutex._m->unlock();
-}