katsuwo's diary - かつを日記

先月 2005年07月 来月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
HNS logo

2005年07月31日()

#1 一ヵ月半ぶり

7 月に入るあたりからかなりの勢いで修羅場に突入していたので、
ゆっくりと何かを考えたり書いたりする余裕が消えていました。
その姿はまさに coding & debug machine でした。

#2 Sclars leaked.

修羅場前 最後に書いたメモPerlのithreadsについて に紹介されていました。

原因として考えられるものは
たぶんサブルーチンtestの@_に外部から参照されていないリファレンスが残っていると、
子スレッドにこれがコピーされて、threadsオブジェクトが破壊される際(サブルーチン
の終わり部分)のガベージコレクトで悪さをしているのではないかと思います。
ということだそうです。

対処方法としては、関数を呼び出す際に呼び元で reference を作っておく他に
単にサブルーチンの最初でshiftやpopを使って@_から怪しげなものを取り除いてしまう
という方法があるようです。

僕が書くコードでは、引数のやり取りに shift() を使わずに
my ($arg1, $arg2, $arg3,...) = @_;
という書き方をしているために @_ に「怪しげなもの」が残ってしまって、
leak が発生してしまっているようです。


手元では threads を使う機会が少ないのとこの記法を改める気がまったくないので、
「呼び元で reference を作っておく」方法で回避するつもりです。

以上、1 日分です。
Powered by hns-2.10-beta7, HyperNikkiSystem Project

このページへの link はご自由に。 アンテナへの登録の際には di.cgi を使ってください。 RSS 使いは rss.cgi もどうぞ。