kaw

kawと申します。

Schemeはかなり前から興味を持っているのですが、なかなかモノになりません。
最近OpenBSDでGaucheがコンパイルできるようになったのが嬉しいです。

ヘタレなコーディングしかできませんが、よろしくです。

Gauche入りLive CD 2006/05/27 00:26:40 PDT

OpenBSDのLiveCDを作成し、公開しています。

最新は、OpenBSD 4.0 + Gauche 0.8.7 です、どうぞご利用下さい。

httpdの雛型を書いてみる。

子プロセス起動による並行サーバ(の雛型)を書いてみたのですが、Memory faultで落ちてしまいます。(2004/05/24 15:53:53 PDT)

(ハイスペックマシンだと、なかなか再現しないかもしれません 2004/05/24 19:14:57 PDT)

 ab -n1000 -c3 http://192.168.1.2:20080/index.html
 $ gosh ./sampleserver.scm 
 starting up server with port 20080
 Parent: reading socket...
 Parent: 30055/1 child process forked
  Child: 30055/1 forked
 Parent: reading socket...
  Child: 23225/2 forked
 Parent: 23225/2 child process forked
 Parent: reading socket...
 Parent: 13056/3 child process forked
    :
    :
    :
 Parent: xxx/7 SIGCHLD caught
  Child: 13000/7 forked
  Child: 9478/xxx, Got ("GET" "/index.html" "HTTP/1.0") 
  Child: 31911/xxx, Got ("GET" "/index.html" "HTTP/1.0")
  Child: 9478/6 http session done, exiting...
  Child: 13000/xxx, Got ("GET" "/index.html" "HTTP/1.0")
  Child: 31911/6 http session done, exiting...
  Child: 13000/7 http session done, exiting...
 Memory fault (core dumped)
 $

Gauche 0.7.4.2使用し、OpenBSD 3.5及びLinux 2.6.6で走らせた環境で発生しました。 プラットフォームに依存しない問題のようなのですが‥。

Linuxですと、以下の場所で落ちていました (2004/05/25 16:50:21 PDT)

kaw@nimbus5:~/Desktop/Scheme$ gdb /usr/local/bin/gosh core
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
Core was generated by `gosh sampleserver.scm'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/local/lib/libgauche.so...done.
Loaded symbols for /usr/local/lib/libgauche.so
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/libcrypt.so.1...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /lib/libutil.so.1...done.
Loaded symbols for /lib/libutil.so.1
Reading symbols from /lib/libm.so.6...done.
Loaded symbols for /lib/libm.so.6
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /usr/local/lib/gauche/0.7.4.2/i686-pc-linux-gnu/libnet.so...done.
Loaded symbols for /usr/local/lib/gauche/0.7.4.2/i686-pc-linux-gnu/libnet.so
#0  0x400338f9 in run_loop () at vm.c:789
789                         e = e->up;
(gdb) bt 
#0  0x400338f9 in run_loop () at vm.c:789
#1  0x400ed74c in __DTOR_END__ () from /usr/local/lib/libgauche.so
(gdb) list
784                     int off = SCM_VM_INSN_ARG1(code);
785                     ScmEnvFrame *e = env;
786
787                     for (; dep > 0; dep--) {
788                         VM_ASSERT(e != NULL);
789                         e = e->up;
790                     }
791                     VM_ASSERT(e != NULL);
792                     VM_ASSERT(e->size > off);
793                     val0 = ENV_DATA(e, off);
(gdb) 

...Schemeより先にCやgdbの使いかたを覚えなければならんのだろうか...?

More ...