mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-30 17:00:23 +02:00
Document the failure of `gc.test' wrt. unused modules.
* test-suite/tests/gc.test (Unused modules are removed): Use guardians instead of `gc-live-object-stats'. Explain failure (FIXME). * ice-9/boot-9.scm (make-module): Add `FIXME' about circular reference. git-archimport-id: lcourtes@laas.fr--2006-libre/guile-core--boehm-gc--0--patch-9
This commit is contained in:
parent
35747a3e06
commit
328efeb9a6
2 changed files with 15 additions and 9 deletions
|
@ -1223,6 +1223,8 @@
|
||||||
;; We can't pass this as an argument to module-constructor,
|
;; We can't pass this as an argument to module-constructor,
|
||||||
;; because we need it to close over a pointer to the module
|
;; because we need it to close over a pointer to the module
|
||||||
;; itself.
|
;; itself.
|
||||||
|
;; FIXME: This creates a circular reference between MODULE and its
|
||||||
|
;; standard eval closure which precludes them from being collected.
|
||||||
(set-module-eval-closure! module (standard-eval-closure module))
|
(set-module-eval-closure! module (standard-eval-closure module))
|
||||||
|
|
||||||
module))))
|
module))))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;;; gc.test --- test guile's garbage collection -*- scheme -*-
|
;;;; gc.test --- test guile's garbage collection -*- scheme -*-
|
||||||
;;;; Copyright (C) 2000, 2001, 2004, 2006 Free Software Foundation, Inc.
|
;;;; Copyright (C) 2000, 2001, 2004, 2006, 2007 Free Software Foundation, Inc.
|
||||||
;;;;
|
;;;;
|
||||||
;;;; This library is free software; you can redistribute it and/or
|
;;;; This library is free software; you can redistribute it and/or
|
||||||
;;;; modify it under the terms of the GNU Lesser General Public
|
;;;; modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -59,13 +59,17 @@
|
||||||
|
|
||||||
(with-test-prefix "gc"
|
(with-test-prefix "gc"
|
||||||
(pass-if "Unused modules are removed"
|
(pass-if "Unused modules are removed"
|
||||||
(let*
|
;; FIXME: This test fails because of the circular reference
|
||||||
((dummy (gc))
|
;; created by `make-module' between the module itself and its
|
||||||
(last-count (cdr (assoc
|
;; standard eval closure.
|
||||||
"eval-closure" (gc-live-object-stats)))))
|
(let* ((guard (make-guardian))
|
||||||
|
(total 1000))
|
||||||
(for-each (lambda (x) (make-module)) (iota 1000))
|
|
||||||
|
(for-each (lambda (x) (guard (make-module))) (iota total))
|
||||||
(gc)
|
(gc)
|
||||||
(gc) ;; twice: have to kill the weak vectors.
|
(gc) ;; twice: have to kill the weak vectors.
|
||||||
(= last-count (cdr (assoc "eval-closure" (gc-live-object-stats)))))
|
(= (length (filter (lambda (x)
|
||||||
))
|
(eq? x #t))
|
||||||
|
(map (lambda (x) (and (guard) #t))
|
||||||
|
(iota total))))
|
||||||
|
total))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue