mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-18 18:40:22 +02:00
2004-09-01 Han-Wen Nienhuys <hanwen@cs.uu.nl>, Kevin Ryde <user42@zip.com.au>
* tests/gc.test: Exercise record in weak-values hash table, exposing a problem in gc.
This commit is contained in:
parent
459cf1f259
commit
ef9ab020ae
1 changed files with 14 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
||||||
;;;; gc.test --- test guile's garbage collection -*- scheme -*-
|
;;;; gc.test --- test guile's garbage collection -*- scheme -*-
|
||||||
;;;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
;;;; Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc.
|
||||||
;;;;
|
;;;;
|
||||||
;;;; This program is free software; you can redistribute it and/or modify
|
;;;; This program is free software; you can redistribute it and/or modify
|
||||||
;;;; it under the terms of the GNU General Public License as published by
|
;;;; it under the terms of the GNU General Public License as published by
|
||||||
|
@ -51,6 +51,19 @@
|
||||||
(define (documented? object)
|
(define (documented? object)
|
||||||
(not (not (object-documentation object))))
|
(not (not (object-documentation object))))
|
||||||
|
|
||||||
|
;; In guile 1.6.4 this test bombed, due to the record in h being collected
|
||||||
|
;; by the gc, but not removed from h, leaving "x" as a freed cell.
|
||||||
|
;; The usual correct result here is for x to be #f, but there's always a
|
||||||
|
;; chance gc will mark something used when it isn't, so we allow x to be a
|
||||||
|
;; record too.
|
||||||
|
(pass-if "weak-values versus records"
|
||||||
|
(let ((rec-type (make-record-type "foo" '()))
|
||||||
|
(h (make-weak-value-hash-table 61)))
|
||||||
|
(hash-set! h "foo" ((record-constructor rec-type)))
|
||||||
|
(gc)
|
||||||
|
(let ((x (hash-ref h "foo")))
|
||||||
|
(or (not x)
|
||||||
|
((record-predicate rec-type) x)))))
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;;
|
;;;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue