| 1 |
--- ORBit2-2.14.3/src/orb/orb-core/orbit-object.c.ref-leaks 2003-10-29 07:22:12.000000000 -0500
|
| 2 |
+++ ORBit2-2.14.3/src/orb/orb-core/orbit-object.c 2006-12-08 12:03:55.000000000 -0500
|
| 3 |
@@ -115,16 +115,22 @@
|
| 4 |
obj->refs = 0;
|
| 5 |
}
|
| 6 |
|
| 7 |
+#define ORBIT_REFCOUNT_IMMORTAL (ORBIT_REFCOUNT_MAX / 2)
|
| 8 |
+
|
| 9 |
gpointer
|
| 10 |
ORBit_RootObject_duplicate (gpointer obj)
|
| 11 |
{
|
| 12 |
ORBit_RootObject robj = obj;
|
| 13 |
|
| 14 |
- if (robj && robj->refs != ORBIT_REFCOUNT_STATIC) {
|
| 15 |
+ if (robj && robj->refs != ORBIT_REFCOUNT_STATIC &&
|
| 16 |
+ robj->refs != ORBIT_REFCOUNT_IMMORTAL) {
|
| 17 |
LINK_MUTEX_LOCK (ORBit_RootObject_lifecycle_lock);
|
| 18 |
robj->refs++;
|
| 19 |
total_refs++;
|
| 20 |
LINK_MUTEX_UNLOCK (ORBit_RootObject_lifecycle_lock);
|
| 21 |
+ if (robj->refs == ORBIT_REFCOUNT_IMMORTAL)
|
| 22 |
+ g_warning ("ORB: ORBit_RootObject %p became immortal"
|
| 23 |
+ " - reference leaks present", robj);
|
| 24 |
}
|
| 25 |
|
| 26 |
return obj;
|
| 27 |
@@ -135,9 +141,13 @@
|
| 28 |
{
|
| 29 |
ORBit_RootObject robj = obj;
|
| 30 |
|
| 31 |
- if (robj && robj->refs != ORBIT_REFCOUNT_STATIC) {
|
| 32 |
+ if (robj && robj->refs != ORBIT_REFCOUNT_STATIC &&
|
| 33 |
+ robj->refs != ORBIT_REFCOUNT_IMMORTAL) {
|
| 34 |
robj->refs++;
|
| 35 |
total_refs++;
|
| 36 |
+ if (robj->refs == ORBIT_REFCOUNT_IMMORTAL)
|
| 37 |
+ g_warning ("ORB: ORBit_RootObject %p became immortal"
|
| 38 |
+ " - reference leaks present", robj);
|
| 39 |
}
|
| 40 |
|
| 41 |
return obj;
|
| 42 |
@@ -148,6 +158,9 @@
|
| 43 |
{
|
| 44 |
g_assert (robj->refs < ORBIT_REFCOUNT_MAX && robj->refs > 0);
|
| 45 |
|
| 46 |
+ if (robj->refs == ORBIT_REFCOUNT_IMMORTAL)
|
| 47 |
+ return;
|
| 48 |
+
|
| 49 |
robj->refs--;
|
| 50 |
total_refs--;
|
| 51 |
|