summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2008-03-17 14:17:38 +1000
committerMichi Henning <michi@zeroc.com>2008-03-17 14:17:38 +1000
commite5e44fb09e2ef6b5ac7f3bb77325740877ffc345 (patch)
tree468a9a56b08da808f441020ad827b75f1f5e7397 /cpp/src
parentbug 2808 - converter demo fixes (diff)
downloadice-e5e44fb09e2ef6b5ac7f3bb77325740877ffc345.tar.bz2
ice-e5e44fb09e2ef6b5ac7f3bb77325740877ffc345.tar.xz
ice-e5e44fb09e2ef6b5ac7f3bb77325740877ffc345.zip
Bug 2429.
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/GC.cpp40
-rw-r--r--[-rwxr-xr-x]cpp/src/IceUtil/ConvertUTF.cpp0
-rw-r--r--[-rwxr-xr-x]cpp/src/IceUtil/ConvertUTF.h0
-rw-r--r--[-rwxr-xr-x]cpp/src/IceUtil/Options.cpp0
-rw-r--r--[-rwxr-xr-x]cpp/src/IceUtil/Shared.cpp0
-rw-r--r--[-rwxr-xr-x]cpp/src/IceUtil/Timer.cpp0
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