[Python-checkins] python/dist/src/Modules gcmodule.c,2.41,2.42

nascheme@sourceforge.net nascheme@sourceforge.net
2002年5月21日 08:53:27 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv11047
Modified Files:
	gcmodule.c 
Log Message:
Add IS_TRACKED and IS_MOVED macros. This makes a little more clear.
Index: gcmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/gcmodule.c,v
retrieving revision 2.41
retrieving revision 2.42
diff -C2 -d -r2.41 -r2.42
*** gcmodule.c	4 May 2002 05:35:20 -0000	2.41
--- gcmodule.c	21 May 2002 15:53:24 -0000	2.42
***************
*** 29,32 ****
--- 29,34 ----
 #define FROM_GC(g) ((PyObject *)(((PyGC_Head *)g)+1))
 
+ /* True if an object is tracked by the GC */
+ #define IS_TRACKED(o) ((AS_GC(o))->gc.gc_next != NULL)
 
 /*** Global GC state ***/
***************
*** 74,77 ****
--- 76,82 ----
 #define GC_MOVED -123
 
+ /* True if an object has been moved to the older generation */
+ #define IS_MOVED(o) ((AS_GC(o))->gc.gc_refs == GC_MOVED)
+ 
 /* list of uncollectable objects */
 static PyObject *garbage;
***************
*** 171,176 ****
 {
 	if (op && PyObject_IS_GC(op)) {
! 		PyGC_Head *gc = AS_GC(op);
! 		if (gc->gc.gc_next != NULL)
 			AS_GC(op)->gc.gc_refs--;
 	}
--- 176,180 ----
 {
 	if (op && PyObject_IS_GC(op)) {
! 		if (IS_TRACKED(op))
 			AS_GC(op)->gc.gc_refs--;
 	}
***************
*** 213,218 ****
 {
 	if (PyObject_IS_GC(op)) {
! 		PyGC_Head *gc = AS_GC(op);
! 		if (gc->gc.gc_next != NULL && gc->gc.gc_refs != GC_MOVED) {
 			gc_list_remove(gc);
 			gc_list_append(gc, tolist);
--- 217,222 ----
 {
 	if (PyObject_IS_GC(op)) {
! 		if (IS_TRACKED(op) && !IS_MOVED(op)) {
! 			PyGC_Head *gc = AS_GC(op);
 			gc_list_remove(gc);
 			gc_list_append(gc, tolist);
***************
*** 857,862 ****
 {
 #ifdef WITH_CYCLE_GC
! 	PyGC_Head *gc = AS_GC(op);
! 	if (gc->gc.gc_next != NULL)
 		_PyObject_GC_UNTRACK(op);
 #endif
--- 861,865 ----
 {
 #ifdef WITH_CYCLE_GC
! 	if (IS_TRACKED(op))
 		_PyObject_GC_UNTRACK(op);
 #endif
***************
*** 942,946 ****
 #ifdef WITH_CYCLE_GC
 	PyGC_Head *g = AS_GC(op);
! 	if (g->gc.gc_next != NULL)
 		gc_list_remove(g);
 	if (generations[0].count > 0) {
--- 945,949 ----
 #ifdef WITH_CYCLE_GC
 	PyGC_Head *g = AS_GC(op);
! 	if (IS_TRACKED(op))
 		gc_list_remove(g);
 	if (generations[0].count > 0) {

AltStyle によって変換されたページ (->オリジナル) /