oops - changeArg is #ElementExpired; changedObject is the one we have to
authorClaus Gittinger <cg@exept.de>
Thu, 30 Jan 1997 21:00:59 +0100
changeset 490 621a7283b926
parent 489 19b498f2eedc
child 491 b05dc84e74c0
oops - changeArg is #ElementExpired; changedObject is the one we have to look for.
ObjFHandle.st
ObjectFileHandle.st
--- a/ObjFHandle.st	Fri Jan 24 23:54:22 1997 +0100
+++ b/ObjFHandle.st	Thu Jan 30 21:00:59 1997 +0100
@@ -75,10 +75,10 @@
     "return the functions which were already extracted from the module."
 
     weakFunctionRefs isNil ifTrue:[^nil].
-    ^ weakFunctionRefs asArray select:[:f | f notNil]
+    ^ weakFunctionRefs asArray select:[:f | f notNil and:[f ~~ 0]]
 
     "Created: 12.7.1996 / 15:33:09 / cg"
-    "Modified: 12.7.1996 / 15:38:00 / cg"
+    "Modified: 30.1.1997 / 20:54:54 / cg"
 !
 
 method
@@ -169,21 +169,33 @@
 update:something with:aParameter from:changedObject
     "my method/class object was collected - unload the underlying objectfile"
 
-    something == weakMethodRef ifTrue:[
+    changedObject == weakMethodRef ifTrue:[
         weakMethodRef nilAllCorpsesAndDo:[:idx |].
     ].
 
-    something == weakClassRefs ifTrue:[
+    changedObject == weakClassRefs ifTrue:[
         weakClassRefs nilAllCorpsesAndDo:[:idx |].
     ].
 
     self isObsolete ifTrue:[
+        weakFunctionRefs notNil ifTrue:[
+            weakFunctionRefs removeDependent:self.
+            weakFunctionRefs := nil.
+        ].
+        weakClassRefs notNil ifTrue:[
+            weakClassRefs removeDependent:self.
+            weakClassRefs := nil.
+        ].
+        weakMethodRef notNil ifTrue:[
+            weakMethodRef removeDependent:self.
+            weakMethodRef := nil.
+        ].
         ('ObjectFileHandle [info]: unloading ' , pathName , '  (method/classes were garbageCollected)') infoPrintCR.
         ObjectFileLoader unloadObjectFile:pathName
     ].
 
     "Created: 5.12.1995 / 18:05:08 / cg"
-    "Modified: 10.1.1997 / 14:58:36 / cg"
+    "Modified: 30.1.1997 / 20:57:56 / cg"
 ! !
 
 !ObjectFileHandle methodsFor:'copying'!
@@ -350,5 +362,5 @@
 !ObjectFileHandle class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/Attic/ObjFHandle.st,v 1.21 1997-01-10 14:49:25 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/Attic/ObjFHandle.st,v 1.22 1997-01-30 20:00:59 cg Exp $'
 ! !
--- a/ObjectFileHandle.st	Fri Jan 24 23:54:22 1997 +0100
+++ b/ObjectFileHandle.st	Thu Jan 30 21:00:59 1997 +0100
@@ -75,10 +75,10 @@
     "return the functions which were already extracted from the module."
 
     weakFunctionRefs isNil ifTrue:[^nil].
-    ^ weakFunctionRefs asArray select:[:f | f notNil]
+    ^ weakFunctionRefs asArray select:[:f | f notNil and:[f ~~ 0]]
 
     "Created: 12.7.1996 / 15:33:09 / cg"
-    "Modified: 12.7.1996 / 15:38:00 / cg"
+    "Modified: 30.1.1997 / 20:54:54 / cg"
 !
 
 method
@@ -169,21 +169,33 @@
 update:something with:aParameter from:changedObject
     "my method/class object was collected - unload the underlying objectfile"
 
-    something == weakMethodRef ifTrue:[
+    changedObject == weakMethodRef ifTrue:[
         weakMethodRef nilAllCorpsesAndDo:[:idx |].
     ].
 
-    something == weakClassRefs ifTrue:[
+    changedObject == weakClassRefs ifTrue:[
         weakClassRefs nilAllCorpsesAndDo:[:idx |].
     ].
 
     self isObsolete ifTrue:[
+        weakFunctionRefs notNil ifTrue:[
+            weakFunctionRefs removeDependent:self.
+            weakFunctionRefs := nil.
+        ].
+        weakClassRefs notNil ifTrue:[
+            weakClassRefs removeDependent:self.
+            weakClassRefs := nil.
+        ].
+        weakMethodRef notNil ifTrue:[
+            weakMethodRef removeDependent:self.
+            weakMethodRef := nil.
+        ].
         ('ObjectFileHandle [info]: unloading ' , pathName , '  (method/classes were garbageCollected)') infoPrintCR.
         ObjectFileLoader unloadObjectFile:pathName
     ].
 
     "Created: 5.12.1995 / 18:05:08 / cg"
-    "Modified: 10.1.1997 / 14:58:36 / cg"
+    "Modified: 30.1.1997 / 20:57:56 / cg"
 ! !
 
 !ObjectFileHandle methodsFor:'copying'!
@@ -350,5 +362,5 @@
 !ObjectFileHandle class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileHandle.st,v 1.21 1997-01-10 14:49:25 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileHandle.st,v 1.22 1997-01-30 20:00:59 cg Exp $'
 ! !