summaryrefslogtreecommitdiff
path: root/cpp/include
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include')
-rw-r--r--cpp/include/Ice/.headers3
-rw-r--r--cpp/include/Ice/GCCountMap.h24
-rw-r--r--cpp/include/Ice/GCObject.h73
-rw-r--r--cpp/include/Ice/GCShared.h49
-rw-r--r--cpp/include/Ice/Initialize.h2
-rw-r--r--cpp/include/Ice/Object.h16
-rw-r--r--cpp/include/Ice/SlicedData.h21
-rw-r--r--cpp/include/IceGrid/.headers1
-rw-r--r--cpp/include/IceUtil/Shared.h24
9 files changed, 106 insertions, 107 deletions
diff --git a/cpp/include/Ice/.headers b/cpp/include/Ice/.headers
index 14ec914402b..931f974c7d2 100644
--- a/cpp/include/Ice/.headers
+++ b/cpp/include/Ice/.headers
@@ -29,8 +29,7 @@ SDK_HEADERS = \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\FactoryTableInit.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Format.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Functional.h \
- $(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\GCCountMap.h \
- $(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\GCShared.h \
+ $(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\GCObject.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Handle.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Ice.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Identity.h \
diff --git a/cpp/include/Ice/GCCountMap.h b/cpp/include/Ice/GCCountMap.h
deleted file mode 100644
index 0edbdabe381..00000000000
--- a/cpp/include/Ice/GCCountMap.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#ifndef ICE_GCCOUNTMAP_H
-#define ICE_GCCOUNTMAP_H
-
-#include <map>
-
-namespace IceInternal
-{
-
-class GCShared;
-
-typedef ::std::map<GCShared*, int> GCCountMap;
-
-}
-
-#endif
diff --git a/cpp/include/Ice/GCObject.h b/cpp/include/Ice/GCObject.h
new file mode 100644
index 00000000000..1ae1df84c28
--- /dev/null
+++ b/cpp/include/Ice/GCObject.h
@@ -0,0 +1,73 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef ICE_GC_OBJECT_H
+#define ICE_GC_OBJECT_H
+
+#include <Ice/Object.h>
+
+#include <IceUtil/MutexPtrLock.h>
+#include <IceUtil/Mutex.h>
+
+namespace IceInternal
+{
+
+class GCObject;
+
+class GCVisitor
+{
+public:
+
+ virtual bool visit(GCObject*) = 0;
+};
+
+class ICE_API GCObject : virtual public Ice::Object
+{
+public:
+
+ //
+ // Flags constant used for collection of graphs
+ //
+ static const unsigned char Collectable;
+ static const unsigned char CycleMember;
+ static const unsigned char Visiting;
+
+ //
+ // Override IceUtil::Shared methods
+ //
+ virtual void __incRef();
+ virtual void __decRef();
+ virtual int __getRef() const;
+ virtual void __setNoDelete(bool);
+
+ //
+ // Override Object methods
+ //
+ virtual bool __gcVisit(GCVisitor&);
+ virtual void ice_collectable(bool);
+
+ //
+ // This method is implemented by Slice classes to visit class
+ // members.
+ //
+ virtual void __gcVisitMembers(IceInternal::GCVisitor&) = 0;
+
+ int __getRefUnsafe()
+ {
+ return _ref;
+ }
+
+private:
+
+ bool collect(IceUtilInternal::MutexPtrLock<IceUtil::Mutex>&);
+};
+
+}
+
+#endif
diff --git a/cpp/include/Ice/GCShared.h b/cpp/include/Ice/GCShared.h
deleted file mode 100644
index d5e599e4715..00000000000
--- a/cpp/include/Ice/GCShared.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#ifndef ICE_GC_SHARED_H
-#define ICE_GC_SHARED_H
-
-#include <IceUtil/Shared.h>
-#include <Ice/Config.h>
-#include <Ice/GCCountMap.h>
-
-namespace IceInternal
-{
-
-class GC;
-
-class ICE_API GCShared : public virtual IceUtil::Shared
-{
-public:
-
- virtual ~GCShared() {}
-
- GCShared& operator=(const GCShared&)
- {
- return *this;
- }
-
- virtual void __incRef();
- virtual void __decRef();
- virtual int __getRef() const;
- virtual void __setNoDelete(bool);
-
- virtual void __gcReachable(GCCountMap&) const = 0;
- virtual void __gcClear() = 0;
-
- int __getRefUnsafe() const
- {
- return _ref;
- }
-};
-
-}
-
-#endif
diff --git a/cpp/include/Ice/Initialize.h b/cpp/include/Ice/Initialize.h
index 2999523ea9e..d0a49de66b1 100644
--- a/cpp/include/Ice/Initialize.h
+++ b/cpp/include/Ice/Initialize.h
@@ -25,8 +25,6 @@
namespace Ice
{
-ICE_API void collectGarbage();
-
ICE_API StringSeq argsToStringSeq(int, char*[]);
#ifdef _WIN32
diff --git a/cpp/include/Ice/Object.h b/cpp/include/Ice/Object.h
index 7e568d19a0d..2f2ec7f5e42 100644
--- a/cpp/include/Ice/Object.h
+++ b/cpp/include/Ice/Object.h
@@ -12,7 +12,6 @@
#include <IceUtil/Mutex.h>
#include <IceUtil/Shared.h>
-#include <Ice/GCShared.h>
#include <Ice/ObjectF.h>
#include <Ice/ProxyF.h>
#include <Ice/IncomingAsyncF.h>
@@ -26,6 +25,7 @@ namespace IceInternal
class Incoming;
class BasicStream;
class Direct;
+class GCVisitor;
}
@@ -100,17 +100,9 @@ public:
virtual void __write(const OutputStreamPtr&) const;
virtual void __read(const InputStreamPtr&);
-
- //
- // Virtual methods to support garbage collection of Slice class instances. These
- // methods are overriden by Slice classes which can have cycles.
- //
- virtual void __addObject(IceInternal::GCCountMap&) {}
- virtual bool __usesGC() { return false; }
- void __decRefUnsafe()
- {
- --_ref;
- }
+
+ virtual bool __gcVisit(IceInternal::GCVisitor&) { return false; };
+ virtual void ice_collectable(bool) { };
protected:
diff --git a/cpp/include/Ice/SlicedData.h b/cpp/include/Ice/SlicedData.h
index 0fb961a46e4..d08c4af067f 100644
--- a/cpp/include/Ice/SlicedData.h
+++ b/cpp/include/Ice/SlicedData.h
@@ -11,7 +11,7 @@
#define ICE_SLICED_DATA_H
#include <Ice/SlicedDataF.h>
-#include <Ice/Object.h>
+#include <Ice/GCObject.h>
namespace Ice
{
@@ -55,7 +55,7 @@ struct ICE_API SliceInfo : public ::IceUtil::Shared
//
// SlicedData holds the slices of unknown types.
//
-class ICE_API SlicedData : public ::IceInternal::GCShared
+class ICE_API SlicedData : public ::IceUtil::Shared
{
public:
@@ -63,26 +63,18 @@ public:
const SliceInfoSeq slices;
- //
- // The internal methods below are necessary to support garbage collection
- // of Ice objects.
- //
-
- virtual void __gcReachable(IceInternal::GCCountMap&) const;
- virtual void __gcClear();
+ void __gcVisitMembers(IceInternal::GCVisitor&);
void __decRefUnsafe()
{
--_ref;
}
-
- void __addObject(IceInternal::GCCountMap&);
};
//
// Unknown sliced object holds instance of unknown type.
//
-class ICE_API UnknownSlicedObject : public Object, private IceInternal::GCShared
+class ICE_API UnknownSlicedObject : virtual public Object, private IceInternal::GCObject
{
public:
@@ -92,10 +84,7 @@ public:
SlicedDataPtr getSlicedData() const;
- virtual void __addObject(::IceInternal::GCCountMap&);
- virtual bool __usesGC();
- virtual void __gcReachable(::IceInternal::GCCountMap&) const;
- virtual void __gcClear();
+ virtual void __gcVisitMembers(IceInternal::GCVisitor&);
virtual void __write(::IceInternal::BasicStream*) const;
virtual void __read(::IceInternal::BasicStream*);
diff --git a/cpp/include/IceGrid/.headers b/cpp/include/IceGrid/.headers
index 4a607cc9705..5dd2e28b4ba 100644
--- a/cpp/include/IceGrid/.headers
+++ b/cpp/include/IceGrid/.headers
@@ -6,6 +6,7 @@ SDK_HEADERS = \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\IceGrid.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Locator.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Observer.h \
+ $(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\PluginFacade.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Query.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\Registry.h \
$(SDK_INCLUDE_PATH)\$(INCLUDE_DIR)\ReplicaGroupFilter.h \
diff --git a/cpp/include/IceUtil/Shared.h b/cpp/include/IceUtil/Shared.h
index 7f95a0f0818..e25637c34dc 100644
--- a/cpp/include/IceUtil/Shared.h
+++ b/cpp/include/IceUtil/Shared.h
@@ -87,7 +87,6 @@ public:
{
if(!_noDelete)
{
- _noDelete = true;
delete this;
}
}
@@ -113,6 +112,12 @@ class ICE_UTIL_API Shared
{
public:
+ //
+ // Flag constant used by the Shared class. Derived classes
+ // such as GCObject define more flag constants.
+ //
+ static const unsigned char NoDelete;
+
Shared();
Shared(const Shared&);
@@ -130,6 +135,21 @@ public:
virtual int __getRef() const;
virtual void __setNoDelete(bool);
+ void __setFlag(unsigned char flag)
+ {
+ _flags |= flag;
+ }
+
+ void __clearFlag(unsigned char flag)
+ {
+ _flags &= ~flag;
+ }
+
+ bool __hasFlag(unsigned char flag)
+ {
+ return (_flags & flag) > 0;
+ }
+
protected:
#if defined(_WIN32)
@@ -140,7 +160,7 @@ protected:
int _ref;
Mutex _mutex;
#endif
- bool _noDelete;
+ unsigned char _flags;
};
}