[mayaa-user:963] 無限ループが発生しました

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2013年 3月 1日 (金) 14:58:02 JST


石上です。

いつもお世話になっております。

無限ループと思われる箇所が2箇所見つかりました。
それぞれ別原因と思われ、また、一方は自分が既存クラスをExtendしている箇所ですので、
オリジナルの状態では発生しないかもしれません。

報告すべきか迷いましたが、念のために報告します。
(先ほど書きかけのメールを送ってしまったために報告せざるを得ない状況になってしまったのですが^^;)

1点目
下記の箇所でHashMapの非同期の問題と思われる箇所がありました。
Rhino内部によるものと思われ、

http://grepcode.com/file/repo1.maven.org/maven2/rhino/js/1.7R2/org/mozilla/javascript/JavaMembers.java

ソースを読んでみると、HashMapが使われています。
もし、呼び出し元の方で回避可能であったらご対応お願い致します。

at java.util.HashMap.get(HashMap.java:346)
at org.mozilla.javascript.JavaMembers.lookupClass(JavaMembers.java:833)
at org.mozilla.javascript.NativeJavaObject.initMembers(NativeJavaObject.java:90)
at org.mozilla.javascript.NativeJavaObject.<init>(NativeJavaObject.java:80)
at org.mozilla.javascript.NativeJavaObject.<init>(NativeJavaObject.java:70)
at org.mozilla.javascript.WrapFactory.wrapAsJavaObject(WrapFactory.java:149)
at org.seasar.mayaa.impl.cycle.script.rhino.WrapFactoryImpl.wrapAsJavaObject(WrapFactoryImpl.java:53)
at org.mozilla.javascript.WrapFactory.wrapNewObject(WrapFactory.java:124)
at org.mozilla.javascript.NativeJavaClass.constructSpecific(NativeJavaClass.java:284)
at org.mozilla.javascript.NativeJavaClass.construct(NativeJavaClass.java:200)
at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:2327)
at org.mozilla.javascript.gen.c2._c0(/mayaa/util.mjs:13)
at org.mozilla.javascript.gen.c2.call(/mayaa/util.mjs)
at org.mozilla.javascript.gen.c2.exec(/mayaa/util.mjs)
at org.seasar.mayaa.impl.cycle.script.rhino.SourceCompiledScriptImpl.execute(SourceCompiledScriptImpl.java:97)
at org.seasar.mayaa.impl.cycle.AbstractServiceCycle.load(AbstractServiceCycle.java:79)
at org.seasar.mayaa.impl.cycle.AbstractServiceCycle.load(AbstractServiceCycle.java:59)
at sun.reflect.GeneratedMethodAccessor161.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:161)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:247)
at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
at org.mozilla.javascript.gen.c1._c0(/view/default.mayaa#beforeRender:4)
at org.mozilla.javascript.gen.c1.call(/view/default.mayaa#beforeRender)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:398)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3065)
at org.mozilla.javascript.gen.c1.call(/view/default.mayaa#beforeRender)
at org.mozilla.javascript.gen.c1.exec(/view/default.mayaa#beforeRender)
at org.seasar.mayaa.impl.cycle.script.rhino.TextCompiledScriptImpl.normalExecute(TextCompiledScriptImpl.java:126)
at org.seasar.mayaa.impl.cycle.script.rhino.TextCompiledScriptImpl.execute(TextCompiledScriptImpl.java:166)


2点目は、次の箇所でやはり無限ループと思われる現象が発生しました。
whileの外に抜けないようです。

at org.seasar.mayaa.impl.engine.specification.SpecificationUtil.findSpecification(SpecificationUtil.java:94)
at org.seasar.mayaa.impl.engine.specification.SpecificationUtil.findSpecification(SpecificationUtil.java:113)
at org.seasar.mayaa.impl.engine.EngineUtil.getSourcePath(EngineUtil.java:109)


ただ、こちらは、呼び出し元が自分が独自にいじったクラスで、
具体的には、
ScriptEnvironmentImplのcompileをOverrideし、
取得したcompiledScriptを独自のクラスでラップをして
ラッパークラス側でexecuteを呼ぶ中で、getSourcePath
を呼んでいます(爆)

おそらく自分の使い方が間違っているのだと思います。
ただ、この箇所で無限ループしてしまうようなことが考えられるのか分かりますでしょうか?

上記二つはスレッドダンプを解析していて見つけたものですので、常に再現出来るものではありません。
多分に偶発的なものか、自分の使い方が間違っていた可能性がありますが、
もし何か分かればご参考にしてください。



--
Susumu ISHIGAMI
susumu.ishigami @ gmail.com


mayaa-user メーリングリストの案内