From: Kevin R. <ke...@ro...> - 2004-08-16 04:20:19
|
A threads/gc report from a Debian user... Michael Campbell wrote: > Package: sbcl > Version: 0.8.21+truly.0.8.13.62-1 > Severity: normal > > > > (use-package :sb-thread) > > (let* ((lock (make-mutex)) > (queue (make-waitqueue :lock lock))) > (loop > (make-thread (lambda () > (condition-wait queue lock) > (print "shouldn't get here"))) > (gc) > (sleep 1))) > > > ;; ...will repeatedly execute the print statement every time (gc) is > ;; called. remove the call to (gc) and it won't, as you would expect. > > > Debian Release: 3.1 > APT prefers testing > APT policy: (990, 'testing'), (500, 'unstable') > Architecture: i386 (i686) > Kernel: Linux 2.6.7 > Locale: LANG=C, LC_CTYPE=C > > Versions of packages sbcl depends on: > ii common-lisp-controller 4.8 This is a Common Lisp source and c > ii libc6 2.3.2.ds1-13 GNU C Library: Shared libraries an > > * sbcl/auto-build: Yes > -- Kevin Rosenberg ke...@ro... |
From: dan~@telent.net - 2004-08-16 09:22:09
|
On Sun, Aug 15, 2004 at 10:20:00PM -0600, Kevin Rosenberg wrote: > A threads/gc report from a Debian user... > > > (use-package :sb-thread) > > > > (let* ((lock (make-mutex)) > > (queue (make-waitqueue :lock lock))) > > (loop > > (make-thread (lambda () > > (condition-wait queue lock) > > (print "shouldn't get here"))) > > (gc) > > (sleep 1))) (a) you must be /holding/ the lock to call condition-wait. I don't see a call to get-mutex or with-mutex here (b) you may be awoken from a condition-wait at times other than when the circumstances obtain that your thread can continue running. When you're woken you need to test that you were woken for the right reason http://www-jcsu.jesus.cam.ac.uk/~csr21/papers/lightning/lightning.html#htoc1 may be helpful -dan |
From: Kevin R. <ke...@ro...> - 2004-08-16 15:37:08
|
Thanks very much for the helpful hints -- appreciated! Kevin dan~@telent.net wrote: > On Sun, Aug 15, 2004 at 10:20:00PM -0600, Kevin Rosenberg wrote: > > A threads/gc report from a Debian user... > > > > > (use-package :sb-thread) > > > > > > (let* ((lock (make-mutex)) > > > (queue (make-waitqueue :lock lock))) > > > (loop > > > (make-thread (lambda () > > > (condition-wait queue lock) > > > (print "shouldn't get here"))) > > > (gc) > > > (sleep 1))) > > (a) you must be /holding/ the lock to call condition-wait. I don't see > a call to get-mutex or with-mutex here > > (b) you may be awoken from a condition-wait at times other than when > the circumstances obtain that your thread can continue running. When > you're woken you need to test that you were woken for the right reason > > http://www-jcsu.jesus.cam.ac.uk/~csr21/papers/lightning/lightning.html#htoc1 > may be helpful > > > -dan |