[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#42013: 26.3; hash tables are not garbage collected
From: |
Lars Ingebrigtsen |
Subject: |
bug#42013: 26.3; hash tables are not garbage collected |
Date: |
Sat, 17 Oct 2020 12:52:40 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Hendrik Tews <hendrik.tews@kernkonzept.com> writes:
> What am I doing wrong that prevents the third call to
> garbage-collect to garbage collect the hash and the uninterned
> symbol?
(let (gc-start gc-state hash result)
;; record gc statistics
(setq gc-start (garbage-collect))
(setq hash (make-hash-table))
(setq gc-state (garbage-collect))
(push (list 'vec1 (- (caddr (assoc 'vectors gc-state))
(caddr (assoc 'vectors gc-start))))
result)
;; make the hash inaccessible
(setq hash nil)
(setq gc-state (garbage-collect))
(push (list 'vec2 (- (caddr (assoc 'vectors gc-state))
(caddr (assoc 'vectors gc-start))))
result)
result)
I've simplified the test case. As the bug submitter says, there's more
vectors after this than before:
((vec2 5) (vec1 5))
But I'm not sure you can use this data in this fine-grained way. For
instance:
(let (gc-start gc-state hash result)
;; record gc statistics
(setq gc-start (garbage-collect))
;;(setq hash (make-hash-table))
(setq gc-state (garbage-collect))
(push (list 'vec1 (- (caddr (assoc 'vectors gc-state))
(caddr (assoc 'vectors gc-start))))
result)
;; make the hash inaccessible
(setq hash nil)
(setq gc-state (garbage-collect))
(push (list 'vec2 (- (caddr (assoc 'vectors gc-state))
(caddr (assoc 'vectors gc-start))))
result)
result)
=> ((vec2 0) (vec1 0))
Sounds good.
(let (gc-start gc-state hash result)
;; record gc statistics
(setq gc-start (garbage-collect))
(make-hash-table)
(setq gc-state (garbage-collect))
(push (list 'vec1 (- (caddr (assoc 'vectors gc-state))
(caddr (assoc 'vectors gc-start))))
result)
;; make the hash inaccessible
(setq hash nil)
(setq gc-state (garbage-collect))
(push (list 'vec2 (- (caddr (assoc 'vectors gc-state))
(caddr (assoc 'vectors gc-start))))
result)
result)
=> ((vec2 -1) (vec1 4))
Uhmn...
So I'm not sure there's anything to fix here, except perhaps noting in
the doc string that you can't do precision math on the numbers? Anybody?
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
- bug#42013: 26.3; hash tables are not garbage collected,
Lars Ingebrigtsen <=