あんまりもう弄る気はなかったのだが、
まつもとさんに指摘された問題を修正し、
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の権限あげますから。