#thread-sleep! がリークしているようです (環境: FreeBSD, Cygwin)
#(use gauche.threads)
(while #t
(thread-sleep! 0.000001))
#こんなコードでどんどんメモリ使用量が増えていきます。
#diff --git a/ext/threads/threads.c b/ext/threads/threads.c
index 422085b..9cf51e4 100644
--- a/ext/threads/threads.c
+++ b/ext/threads/threads.c
@@ -385,6 +385,8 @@ ScmObj Scm_ThreadSleep(ScmObj timeout)
intr = TRUE;
}
SCM_INTERNAL_MUTEX_UNLOCK(dummym);
+ SCM_INTERNAL_MUTEX_DESTROY(dummym);
+ SCM_INTERNAL_COND_DESTROY(dummyc);
if (intr) Scm_SigCheck(Scm_VM());
#else /*!GAUCHE_HAS_THREADS*/
Scm_Error("not implemented!\n");
#このパッチを当てた後、上のテストコードに (gc) を入れるととりあえずは増えなくなりました。(パッチ前では (gc) をしても増え続けていました)
#CGIとしてGauche を使うときに、intersperse 関数を呼び出すとエラーになるのですが、なぜでしょうか?
##!/usr/bin/env gosh
(use www.cgi)
(use text.html-lite)
(define (main args)
(cgi-main
(lambda (p)
(list (cgi-header)
(html:h1 (intersperse " " '("a" "b" "c")))))))
#のコードで、CUI から起動すれば欲しいレスポンスが出力されるのですが、CGI としてWeb から呼び出すと、
#Error
unbound variable: intersperse
#が返されてしまいます・・・
#kazh98さん、cgiとして呼ばれてるgoshとコマンドラインで呼び出してるgoshは同じバージョンですか? intersperseは以前のバージョンではutil.listモジュールにあったのが、最近のバージョンでは組み込みになっています。
#おっしゃる通りでした。システムにインストールされた古いgosh を呼び出していたようで、shebang を絶対パスにしたら問題が解消しました。ご指摘にありがとうございます。