Gauche > Archives > 2013/03/28

2013/03/28 07:45:12 UTCcryks
#
thread-sleep! がリークしているようです (環境: FreeBSD, Cygwin)
#
(use gauche.threads)

(while #t
  (thread-sleep! 0.000001))
#
こんなコードでどんどんメモリ使用量が増えていきます。
2013/03/28 08:06:56 UTCcryks
#
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) をしても増え続けていました)
2013/03/28 10:27:03 UTCkazh98
#
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
#
が返されてしまいます・・・
2013/03/28 10:41:41 UTCshiro
#
kazh98さん、cgiとして呼ばれてるgoshとコマンドラインで呼び出してるgoshは同じバージョンですか? intersperseは以前のバージョンではutil.listモジュールにあったのが、最近のバージョンでは組み込みになっています。
2013/03/28 12:38:15 UTCkazh98
#
おっしゃる通りでした。システムにインストールされた古いgosh を呼び出していたようで、shebang を絶対パスにしたら問題が解消しました。ご指摘にありがとうございます。