chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] mailbox: not working on 2.3?


From: Graham Fawcett
Subject: [Chicken-users] mailbox: not working on 2.3?
Date: Wed, 12 Apr 2006 10:27:18 -0400

The mailbox egg does not work on my 2.3 build: it deadlocks on
mailbox-wait! if the mailbox is empty.

$ csi
 )   ___
(__/_____) /)   ,    /)
  /       (/      _ (/_   _ __
 /        / )__(_(__/(___(/_/ (_
(______)
Version 2, Build 3 - linux-unix-gnu-x86 - [ dload ptables ]
(c)2000-2005 Felix L. Winkelmann
; loading /home/graham/.csirc ...
#;1> (use mailbox)
; loading /usr/local/lib/chicken/mailbox.so ...
; loading library srfi-18 ...
#;2> (define m (make-mailbox))
#;3> (mailbox-receive! m)
Error: deadlock

        Call history:

        <eval>          (mailbox-receive! m)    <--

According to the docs, I would have expected the thread to suspend,
awaiting a new message.

The script below loads mailbox.scm, producing a better trace:

; simple-test.scm
(load "mailbox.scm")
(mailbox-receive! (make-mailbox))

$ csi -s ./simple-test.scm
Warning: declarations are ignored in interpreted code
(##core#declare (quote (disable-interrupts)) (quote (no-bound-checks))
(quote (fixnum)))
Error: deadlock

Call history:

<eval>  (require (quote extras) (quote srfi-18))
<eval>  (mailbox-receive! (make-mailbox))
<eval>  (make-mailbox)
<eval>  [make-mailbox] (##sys#make-structure (quote mailbox)
(make-queue) (quote ()) (:optional name (gensym (quote mailbox))))
<eval>  [make-mailbox] (make-queue)
<eval>  [make-mailbox] (null? g0)
<eval>  [make-mailbox] (gensym (quote mailbox))
<eval>  (mailbox-wait! ch)
<eval>  [mailbox-wait!] (##sys#check-structure ch (quote mailbox)
(quote mailbox-wait!))
<eval>  [mailbox-wait!] (##sys#slot ch 1)
<eval>  [mailbox-wait!] (queue-empty? q)
<eval>  [mailbox-wait!] (##sys#setslot ch 2 (append (##sys#slot ch 2)
(list ##sys#current-thread)))
<eval>  [mailbox-wait!] (append (##sys#slot ch 2) (list ##sys#current-thread))
<eval>  [mailbox-wait!] (##sys#slot ch 2)
<eval>  [mailbox-wait!] (list ##sys#current-thread)
<eval>  [mailbox-wait!] (thread-suspend! ##sys#current-thread)  <--

The example program on the mailbox-egg page also deadlocks -- but only
once the mailbox is empty. The consumer loops through the four sent
messages, and deadlocks on the fifth (mailbox-receive!) attempt.

(A side-note about the example: if run as a standalone script, it
needs to end with a thread-join! to the consumer thread, or the
mailbox is never read. Perhaps that should be added on the help page?)

Thanks,
Graham




reply via email to

[Prev in Thread] Current Thread [Next in Thread]