[mayaa-user:680] カスタムタグのreleaseメソッド呼び出しのタイミングについて
佐竹雅央
[E-MAIL ADDRESS DELETED]
2008年 8月 20日 (水) 16:00:09 JST
佐竹と申します、お世話になっております。
Mayaa1.1.15〜16を使わせて頂いています。
早速ですが、JSPカスタムタグのプーリングとreleaseについて、
確認させていただきたいことがあります。
カスタムタグのrelease()メソッドですが、ガベージ直前にしか
呼ばないことになっていますが、Mayaaの JspProcessor は、
タグの使用後に、毎回これを呼んでしまっている気がします。
そのため、release()の中で普段はnullになることの無いフィールドも
含めてnullクリアしているタグが、プーリング・再利用されると、
NullPointerExceptionを発生させてしまいます。
(具体的にはStrutsのLinkTagで発生しました)
ただ、過去ログなどからMayaaではTagのプーリングをしていない
ような記述もありましたのでソースを呼んでみましたところ、
0.Tag(と属性)に紐付くPoolがないので空Poolを作成(※初回のみ)
1.PoolからTagを取り出そうとして空なので新しいTagを作成
2.Tagを使用
(略)
3.Tag#release()を呼ぶ
4.TagをPoolに戻す
5.TryCatchFinallyなTagかチェックするためにPoolからTag取り出し
6.チェックに使ったTagはPoolに戻さない
という具合になっているように見受けられました。
(TryCatchFinallyであるTagの場合は少しタイミングが変わるようですが)
4でPoolに入れるものの5でスグに取り出して、
そのまま戻さないので使い捨て同然なのですが、
別スレッドが4,5の間に滑り込んでrelease呼び出し後の
Tagを使ってしまうことはありませんか?
勘違いであれば申し訳ありません。
以上、宜しくお願い致します。
mayaa-user メーリングリストの案内