2006-07-19

_ failmallocの続き

あんまりもう弄る気はなかったのだが、 まつもとさんに指摘された問題を修正し、 zundaさんのパッチに触発されて最大失敗回数の指定、 更に、安全に確保できるサイズの指定をサポートした。 自分は好みがうるさいので、コードは自前で書いた。 すんません。 バージョンは 1.0 です。 二進法ですから。

しかしこれで何やら ls の不思議な挙動に気づいてしまった。

$ LD_PRELOAD=.libs/libfailmalloc.so FAILMALLOC_TIMES=4 ls
Makefile    config.status*         failmalloc-1.0.tar.gz.sig  failmalloc.o      libtool*
config.log  failmalloc-1.0.tar.gz  failmalloc.lo              libfailmalloc.la

なぜかちょっとぐらい失敗があっても、死なない。

$ LD_PRELOAD=.libs/libfailmalloc.so FAILMALLOC_TIMES=40 ls
ls: memory exhausted

いっぱい失敗すると、死ぬ。

$ LD_PRELOAD=.libs/libfailmalloc.so FAILMALLOC_INTERVAL=40 FAILMALLOC_TIMES=2 ls
Makefile    config.status*         failmalloc-1.0.tar.gz.sig  failmalloc.o      libtool*
config.log  failmalloc-1.0.tar.gz  failmalloc.lo              libfailmalloc.la

40回目で死ぬだけなのかと思ったが、どうもそうではない。

$ LD_PRELOAD=.libs/libfailmalloc.so FAILMALLOC_INTERVAL=40 FAILMALLOC_TIMES=4 ls
Virtual memory exhausted.

でも四回繰り返すと死ぬ。しかもエラーメッセージが違う。

$ LD_PRELOAD=.libs/libfailmalloc.so FAILMALLOC_INTERVAL=43 FAILMALLOC_TIMES=2 ls
Makefile    config.status*         failmalloc-1.0.tar.gz.sig  failmalloc.o      libtool*
config.log  failmalloc-1.0.tar.gz  failmalloc.lo              libfailmalloc.la

だからと言って、43回目あたりで死ぬわけでもない。

これ以上真面目に追ってないので、なぜかはよく分からない。 暇な人がいたら、調べて教えてください。

とりあえずこれ以上弄る気は全くないので、 もっとやりたい人がいたら言ってください。 Project Adminの権限あげますから。

[]