scsh-users
[Top] [All Lists]

help strange thread

To: scsh@zurich.csail.mit.edu
Subject: help strange thread
From: ZHAO Wei <zhaoway@public1.ptt.js.cn>
Date: Sun, 02 Nov 2003 03:25:37 +0800
Hello, everyone!

I find my problem still somewhere else. :(

Following one screenful snippet demonstrates the weird behavior.

To run it, you should have netcat installed and available as shell command "nc" which is the case in Debian GNU/Linux.

The below script has race conditions between client and server, but the original version does not have this race condition, because the server is always up. To demonstrate my trouble concisely, I have to use nc with which I don't know how not to introduce the race condition. But anyway, the race should be largely remedied by the sleep.

Expected output is the repeated display on the console (among other debug strings) the message "This won't appear the second time". But the actual result I got, of course, is that the mentioned message only be shown once. And the script hang before that clause, or during, about which I'm not sure.

The s48 debugger does not help much, since it looks like the debugger falls deep within the VM itself. And I don't know enough about the VM to get anything out of it. :(

Please help me! Thanks!

BTW, I'm writing an magazine article for some interesting and easy things one can do with SCSH. But obviously I been hitten hard now. Two days on this problem and I'm still not out. :]

-----------------------------------------
#! /usr/bin/scsh \
-o threads -e main -s
!#


(define (display-line string)
  (display string) (newline))


(define (delay-work work)
  (spawn (lambda ()
(display-line "will do work after 3 seconds") (sleep 3000) (work))))


(define (trouble)
  (display-line "enter troubled work")
  (run (begin (display-line "This won't appear the second time")))
  (run (| (begin (display-line "XXX"))
          (nc localhost 8888))))


(define (main ignore)
  (delay-work trouble)
  (let ((watcher (lambda ()
                   (awk (read-line) (line) ()
                        ((: bos "XXX") (delay-work trouble))))))
    (let lp ()
      (run (| (nc -l -p 8888)
              (begin (watcher))))
      (lp))))
----------------------------------

Thanks for reading! :)

--
zhaoway@public1.ptt.js.cn
http://c2.com/cgi/wiki?ZhaoWay
http://advogato.org/person/zhaoway/
linux.ext2fs.tcp.ip.netfilter.gnu.debian.dpkg.rpm.bash.lex
yacc.gcc.lisp.scheme.ocaml.latex.html.css.php.apache.mysql


<Prev in Thread] Current Thread [Next in Thread>