From: Linas Vepstas <linasvepstas@gmail.com>
To: 25386@debbugs.gnu.org
Subject: bug#25386: guile-2.0 and 2.2 thread leakage+crash; very simple test attached.
Date: Sat, 7 Jan 2017 15:47:51 -0600 [thread overview]
Message-ID: <CAHrUA36ZAxeC1nYZQfTLBXGDK1XciNHkEafPuQ+VqzZXASOwcw@mail.gmail.com> (raw)
The (very simple) program below leaks ... something, very rapidly, and
then crashes after about 15-30 seconds. Last thing printed before
crash:
rate=194.80519560944032
num threads=2
((gc-time-taken . 2791348254) (heap-size . 7532883968) (heap-free-size
. 2449408) (heap-total-allocated . 23912882640)
(heap-allocated-since-gc . 1073995264) (protected-objects . 90)
(gc-times . 87))
Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
Aborted
Similar issue in guile-2.2 except it takes longer (8 minutes) and
crashes in gc somewhere. I assume that some sort of
continuation is left lying about, even though the thread has
exited.
(define junk 0)
(define halt #f)
(define (wtf-thr)
(define start (- (current-time) 0.1))
; Create thread that does junk and exits. Yes, the increment
; of `junk` is not protected, and its racey, but so what.
(define (mkthr v) (call-with-new-thread (lambda () (set! junk (+ junk
1)))))
; thread arguments
(define thrarg (make-list 10 0))
(define cnt 0)
(define (mke)
; Create a limited number of threads
(define thr-list (map mkthr thrarg))
; (display (length (all-threads)))
(map join-thread thr-list)
; Some handy debug printing.
(set! cnt (+ cnt 1))
(if (eq? 0 (modulo cnt 500))
(begin
(display "rate=")
(display (/ cnt (- (current-time) start))) (newline)
(display "num threads=")
(display (length (all-threads))) (newline)
(display (gc-stats)) (newline) (newline)
)))
; tail recursive infinite loop.
(define (aloop) (mke) (if (not halt) (aloop)))
; while forever.
(aloop)
)
; Run elsewhere, so that we have a shell prompt
; (not required for the bug)
(call-with-new-thread wtf-thr)
; halt if desired.
; (set! halt #t)
next reply other threads:[~2017-01-07 21:47 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-07 21:47 Linas Vepstas [this message]
2017-01-08 2:57 ` bug#25386: Manual gc helps Linas Vepstas
2017-01-08 14:57 ` bug#25386: test case update Linas Vepstas
2017-01-08 21:55 ` bug#25386: calling gc too often triggers a crash Linas Vepstas
2017-01-09 1:28 ` bug#25386: Please ignore previous stack trace Linas Vepstas
2017-01-11 6:14 ` bug#25386: This can be closed Linas Vepstas
2017-03-01 15:31 ` Andy Wingo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAHrUA36ZAxeC1nYZQfTLBXGDK1XciNHkEafPuQ+VqzZXASOwcw@mail.gmail.com \
--to=linasvepstas@gmail.com \
--cc=25386@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).