Opened 12 years ago
Last modified 12 years ago
#905 closed defect
Unreliable behavior of hash tables with symbols as keys (regression wrt 4.7.4) — at Version 1
Reported by: | Ivan Raikov | Owned by: | |
---|---|---|---|
Priority: | critical | Milestone: | 4.9.0 |
Component: | core libraries | Version: | 4.8.x |
Keywords: | Cc: | ||
Estimated difficulty: |
Description (last modified by )
The nemo program relies heavily on performing transformations over hash tables with symbols as keys. It works fine with Chicken 4.7.4, but unfortunately there seems to have been a regression in 4.8.0rc1, which results in hash-table-exists? and hash-table-ref failing to find any of the existing keys in the table after a number of transformations have been performed.
The following code reproduces the issue:
(use srfi-1 srfi-69) (define t (make-hash-table hash: symbol-hash)) (hash-table-set! t 'k1 1) (hash-table-ref t 'k1) (for-each (lambda (k v) (printf "hash-table-set! ~A ~A~%" k v) (hash-table-set! t k v)) (list-tabulate 10 (lambda (i) (gensym 'k))) (list-tabulate 10 (lambda (i) i)) ) (print (hash-table-ref t 'k15))
Perhaps the hash tables stop working after some garbage collections have been performed. This issue is not entirely new; nemo previously used the environments egg, which was also exhibiting similar unreliable behavior, so I had resorted to using strings instead of symbols as keys. Any advice on how to debug this would be appreciated.