id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,difficulty 1356,trace buffer unnecessarily holds on to thread objects,kristianlm,felix winkelmann," version: {{{ ;; 2015 klm@kth /s/p/a/a/s/ais-sse ➤ csi -version ;; ;; CHICKEN ;; (c) 2008-2017, The CHICKEN Team ;; (c) 2000-2007, Felix L. Winkelmann ;; Version 4.12.0 (rev 6ea24b6) ;; linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ] ;; compiled 2017-02-19 on yves.more-magic.net (Linux) }}} running the program below '''should''' output this: {{{ ;; 2017 klm@kth /s/p/a/a/s/ais-sse ➤ cat weak-test.scm | csi -p '(read)' ;; (use srfi-18 lolevel) ;; 2017 klm@kth /s/p/a/a/s/ais-sse ➤ csi -s weak-test.scm ;; locking mutex ;; unlocking mutex ... ;; weak locative: #(123) ;; weak locative: #(123) ;; weak locative: #(123) ;; weak locative: #(123) ;; ^C ;; *** user interrupt *** ;; }}} Where the locative to REFERENCE is kept alive forever. However, it looses track of this REFERENCE: {{{ ;; ;; 2016 klm@kth /s/p/a/a/s/ais-sse ➤ csi -s weak-test.scm ;; locking mutex ;; unlocking mutex ... ;; weak locative: #(123) ;; weak locative: #f ;; weak locative: #f ;; weak locative: #f ;; ^C ;; *** user interrupt *** }}} There are several ways you can make this program work: - compile it and run it - remove the srfi-13 import (it's not used) - assign the first thread to a top variable Here's the program in question that doesn't work: {{{ (use srfi-13 ;; <-- killer import (any import will breaks things, try srfi-4 too for example) srfi-18 lolevel) (define wl #f) (thread-start! (lambda () (define mutex (make-mutex)) (define cv (make-condition-variable)) (print ""locking mutex"") (mutex-lock! mutex) (let ((REFERENCE (vector 123))) (set! wl (make-weak-locative REFERENCE)) (print ""unlocking mutex ..."") (mutex-unlock! mutex cv) (print ""unlocked!"") (print ""DONE (REFERENCE may now be out of scope) "" REFERENCE)))) (thread-start! (lambda () (let loop () (print ""weak locative: "" (locative->object wl)) (thread-sleep! 1) (gc #t) (loop)))) (thread-sleep! 10) }}} ",defect,closed,minor,5.0,unknown,4.12.0,fixed,,,medium