dotgnu-pnet-commits
[Top][All Lists]
Advanced

[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] ); 
+                                               }
                                        }
                                }
                        }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]