diff options
author | Michi Henning <michi@zeroc.com> | 2004-11-25 04:18:34 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2004-11-25 04:18:34 +0000 |
commit | caa0420fca74674bf5d3862919da69cf90204b1f (patch) | |
tree | 842ef072c18f99250bf613cbcfefbac510e26261 /cpp/src/IceUtil/GCShared.cpp | |
parent | Improved test (diff) | |
download | ice-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.cpp | 34 |
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(); -} |