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

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2014年 8月 12日 (火) 14:21:59 JST


いしがみです。

以前やりとりをさせていただいた下記の件について、
Rhino最新では修正されているコンカレントのBugFixを
以下の場所にforkして、Mayaaが使用している1.7R2に適用してみました。
https://github.com/susumuishigami/rhino/tree/Rhino1_7R2_BRANCH_Patch_for_Mayaa

ここから自前で生成したjs.jarをmayaaに適用したブランチが以下になります
https://github.com/susumuishigami/mayaa/tree/rhino1_7r2_hashmap_concurrent_bugfix

軽く動作確認を行っていますが、
jarの生成時のJDKは、mayaa本体に合わせたほうが良いかもしれません。
もしよければご参考にしてください。


2013年3月4日 21:29 suga <ko.suga @ gmail.com>:
> suga です。
>
> 2013/3/1 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>
>>1点目
>>下記の箇所でHashMapの非同期の問題と思われる箇所がありました。
>>Rhino内部によるものと思われ、
>
> rhino の方は、最新版でも別の場所で修正があるようなので、別途手元で変更して
> jarを作成するしかないかもしれません。
> https://github.com/mozilla/rhino/pull/103
>
>
> --
> suga ( ko.suga @ gmail.com )
>
>
> 2013/3/1 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>
>>
>> 石上です。
>>
>> いつもお世話になっております。
>>
>> 無限ループと思われる箇所が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 mailing list
>> mayaa-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>
>
>
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user



-- 
Susumu ISHIGAMI
susumu.ishigami @ gmail.com


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