[Gauche-devel-jp] Thread 内での open-input-file について

Zurück zum Archiv-Index

mori jn3r-****@asahi*****
2003年 12月 25日 (木) 14:49:15 JST


初めまして。森といいます。
以下のプログラムを実行し、telnet localhost 40000 すると
プログラムが応答しなくなり Control-C で終了しなくなってしまいます。

(use gauche.net)
(use gauche.threads)

(define sock (make-server-socket 'inet 40000 :reuse-addr? #t))

(define (main-loop)
  (let ((s (socket-accept sock)))
    (display "connect") (flush)
    (let ((thr (make-thread
      (lambda () (display "start") (flush)
        (let ((file (open-input-file "/file")))
          (close-input-port file))
        (socket-close s)
        (display "return") (flush)))))
      (thread-start! thr)))
  (main-loop))

;;(close-input-port (open-input-file "/file"))
(main-loop)

環境は Gauche-0.7.3 で FreeBSD 4.9-RELEASE です。Linux 2.4.18では動作しました。
(main-loop) の前のコメントアウトをはずすと上手くいくのですが、
while :; do telnet localhost 40000; done すると
数十回接続、切断を繰り返した後また同じように固まってしまいます。
どうしたらよいのでしょうか。



Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index