[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] pnet ./ChangeLog engine/lib_gc.c
From: |
Heiko Weiss |
Subject: |
[dotgnu-pnet-commits] pnet ./ChangeLog engine/lib_gc.c |
Date: |
Fri, 17 Mar 2006 10:40:38 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: pnet
Branch:
Changes by: Heiko Weiss <address@hidden> 06/03/17 10:40:35
Modified files:
. : ChangeLog
engine : lib_gc.c
Log message:
KlausT helped me fixing weak references in gc.
Thx Klaus!
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/ChangeLog.diff?tr1=1.3306&tr2=1.3307&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/lib_gc.c.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
Patches:
Index: pnet/ChangeLog
diff -u pnet/ChangeLog:1.3306 pnet/ChangeLog:1.3307
--- pnet/ChangeLog:1.3306 Sun Mar 12 17:57:06 2006
+++ pnet/ChangeLog Fri Mar 17 10:40:32 2006
@@ -1,3 +1,7 @@
+2006-03-17 Klaus Treichel <address@hidden>
+
+ * engine/lib_gc.c : fixed weak references
+
2006-03-12 Klaus Treichel <address@hidden>
* engine/jitc.c: Add the exceptionhandler and some exception stuff.
Index: pnet/engine/lib_gc.c
diff -u pnet/engine/lib_gc.c:1.8 pnet/engine/lib_gc.c:1.9
--- pnet/engine/lib_gc.c:1.8 Wed Jul 7 22:15:48 2004
+++ pnet/engine/lib_gc.c Fri Mar 17 10:40:33 2006
@@ -220,7 +220,11 @@
if((table->numWeakHandles & 7) == 0)
{
/* Extend the size of the weak handle
table */
- newArray = (void **)ILGCAllocPersistent
+ /*
+ *****: for weak refs, do not use
AllocPersistent
+ newArray = (void **)ILGCAllocPersistent
+ */
+ newArray = (void **)ILGCAllocAtomic
((table->numWeakHandles + 8) *
sizeof(void *));
if(!newArray)
{
@@ -235,9 +239,18 @@
if(table->weakHandles[index] !=
(void
*)(ILNativeInt)(-1))
{
-
ILGCUnregisterWeak
-
(&(table->weakHandles[index]));
+ /* *****:
+
ILGCUnregisterWeak(&(table->weakHandles[index]));
ILGCRegisterWeak(&(newArray[index]));
+ */
+
+ // use
RegisterGeneralWeak to monitor disappearing links
+ if( 0 !=
table->weakHandles[index] ) {
+
ILGCUnregisterWeak(&(table->weakHandles[index]));
+ }
+ if( 0 !=
newArray[index] ) {
+
ILGCRegisterGeneralWeak(&(newArray[index]), newArray[index] );
+ }
}
}
ILGCFreePersistent(table->weakHandles);
@@ -245,7 +258,12 @@
table->weakHandles = newArray;
}
table->weakHandles[table->numWeakHandles] = ptr;
-
ILGCRegisterWeak(&(table->weakHandles[table->numWeakHandles]));
+ // *****:
+ //
ILGCRegisterWeak(&(table->weakHandles[table->numWeakHandles]));
+
+ if( 0 !=
table->weakHandles[table->numWeakHandles] ) {
+
ILGCRegisterGeneralWeak(&(table->weakHandles[table->numWeakHandles]),
table->weakHandles[table->numWeakHandles] );
+ }
handle = (((++(table->numWeakHandles)) << 2) |
type);
}
break;
@@ -439,7 +457,20 @@
if(table->weakHandles[index - 1] !=
(void
*)(ILNativeInt)(-1))
{
+ /* *****:
+ unregister old Target and
Register new Ttarget
+ */
+
+ if( 0 !=
table->weakHandles[index - 1] ) {
+
ILGCUnregisterWeak(&(table->weakHandles[index-1]));
+ }
+
table->weakHandles[index - 1] =
ptr;
+
+ // *****:
+ if( 0 != ptr ) {
+
ILGCRegisterGeneralWeak(&(table->weakHandles[index-1]),
table->weakHandles[index-1] );
+ }
}
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] pnet ./ChangeLog engine/lib_gc.c,
Heiko Weiss <=