diff options
author | Michi Henning <michi@zeroc.com> | 2008-03-17 14:17:38 +1000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2008-03-17 14:17:38 +1000 |
commit | e5e44fb09e2ef6b5ac7f3bb77325740877ffc345 (patch) | |
tree | 468a9a56b08da808f441020ad827b75f1f5e7397 /cpp/src | |
parent | bug 2808 - converter demo fixes (diff) | |
download | ice-e5e44fb09e2ef6b5ac7f3bb77325740877ffc345.tar.bz2 ice-e5e44fb09e2ef6b5ac7f3bb77325740877ffc345.tar.xz ice-e5e44fb09e2ef6b5ac7f3bb77325740877ffc345.zip |
Bug 2429.
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/GC.cpp | 40 | ||||
-rw-r--r--[-rwxr-xr-x] | cpp/src/IceUtil/ConvertUTF.cpp | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | cpp/src/IceUtil/ConvertUTF.h | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | cpp/src/IceUtil/Options.cpp | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | cpp/src/IceUtil/Shared.cpp | 0 | ||||
-rw-r--r--[-rwxr-xr-x] | cpp/src/IceUtil/Timer.cpp | 0 |
6 files changed, 28 insertions, 12 deletions
diff --git a/cpp/src/Ice/GC.cpp b/cpp/src/Ice/GC.cpp index 04d934cc008..29b6fcf452f 100644 --- a/cpp/src/Ice/GC.cpp +++ b/cpp/src/Ice/GC.cpp @@ -54,24 +54,17 @@ using namespace IceInternal; // GCShared // -IceInternal::GCShared::GCShared() : - _ref(0), - _noDelete(false) -{ -} - -IceInternal::GCShared::GCShared(const GCShared&) : - _ref(0), - _noDelete(false) -{ -} - void IceInternal::GCShared::__incRef() { RecMutex::Lock lock(gcRecMutex); +#if defined(ICE_HAS_ATOMIC_FUNCTIONS) + assert(_ref.counter >= 0); + atomicInc(&_ref); +#else assert(_ref >= 0); ++_ref; +#endif } void @@ -79,8 +72,13 @@ IceInternal::GCShared::__decRef() { RecMutex::Lock lock(gcRecMutex); bool doDelete = false; +#if defined(ICE_HAS_ATOMIC_FUNCTIONS) + assert(_ref.counter > 0); + if(IceUtilInternal::atomicDecAndTest(&_ref)) +#else assert(_ref > 0); if(--_ref == 0) +#endif { doDelete = !_noDelete; _noDelete = true; @@ -96,7 +94,11 @@ int IceInternal::GCShared::__getRef() const { RecMutex::Lock lock(gcRecMutex); +#if defined(ICE_HAS_ATOMIC_FUNCTIONS) + return _ref.counter; +#else return _ref; +#endif } void @@ -110,8 +112,13 @@ void IceInternal::GCShared::__gcIncRef() { RecMutex::Lock lock(gcRecMutex); +#if defined(ICE_HAS_ATOMIC_FUNCTIONS) + assert(_ref.counter >= 0); + if(_ref.counter == 0) +#else assert(_ref >= 0); if(_ref == 0) +#endif { #ifdef NDEBUG // To avoid annoying warnings about variables that are not used... gcObjects.insert(this); @@ -120,7 +127,11 @@ IceInternal::GCShared::__gcIncRef() assert(rc.second); #endif } +#if defined(ICE_HAS_ATOMIC_FUNCTIONS) + IceUtilInternal::atomicInc(&_ref); +#else ++_ref; +#endif } void @@ -128,8 +139,13 @@ IceInternal::GCShared::__gcDecRef() { RecMutex::Lock lock(gcRecMutex); bool doDelete = false; +#if defined(ICE_HAS_ATOMIC_FUNCTIONS) + assert(_ref.counter > 0); + if(IceUtilInternal::atomicDecAndTest(&_ref)) +#else assert(_ref > 0); if(--_ref == 0) +#endif { doDelete = !_noDelete; _noDelete = true; diff --git a/cpp/src/IceUtil/ConvertUTF.cpp b/cpp/src/IceUtil/ConvertUTF.cpp index 331fa50cfa7..331fa50cfa7 100755..100644 --- a/cpp/src/IceUtil/ConvertUTF.cpp +++ b/cpp/src/IceUtil/ConvertUTF.cpp diff --git a/cpp/src/IceUtil/ConvertUTF.h b/cpp/src/IceUtil/ConvertUTF.h index db25674998c..db25674998c 100755..100644 --- a/cpp/src/IceUtil/ConvertUTF.h +++ b/cpp/src/IceUtil/ConvertUTF.h diff --git a/cpp/src/IceUtil/Options.cpp b/cpp/src/IceUtil/Options.cpp index 444c71d96cc..444c71d96cc 100755..100644 --- a/cpp/src/IceUtil/Options.cpp +++ b/cpp/src/IceUtil/Options.cpp diff --git a/cpp/src/IceUtil/Shared.cpp b/cpp/src/IceUtil/Shared.cpp index 5c30967bc35..5c30967bc35 100755..100644 --- a/cpp/src/IceUtil/Shared.cpp +++ b/cpp/src/IceUtil/Shared.cpp diff --git a/cpp/src/IceUtil/Timer.cpp b/cpp/src/IceUtil/Timer.cpp index 8a70432709d..8a70432709d 100755..100644 --- a/cpp/src/IceUtil/Timer.cpp +++ b/cpp/src/IceUtil/Timer.cpp |