Google

2013年6月6日木曜日

Unity:GetThreadContextでのエラー

Unityの技術系記事は久々。
作るのを辞めた訳じゃなく、実はプラグインを開発してました。
弊社はプラグイン開発も可能ですのでお見知り置きを。

ってそれはどうでもよくて、最近自分じゃなくて社員とかのPCで良く見るエラーについて少々。

このエラーの再現度はまちまちです。
エディタ上でテスト動作させていると突然、

 「Fatal error in gc: GetThreadContext failed」

とか一言書かれた小さいダイアログ。
赤いバッテンマークでOKのみ。
押した後は必ずクラッシュしてしまいます。
何度か今までも出ていたものの、たまにしか出ないので無視してました。

が、作業データが消えて効率悪いので、いい加減リサーチすることに。
ざざっと見て出てくるのはWin7 74bit、Avast、ESET辺りで相性が悪いという情報。
確かにそのPCはこういうスペックと構成。

 Windows7 64-bit
 Unity3.5.x
 Avast

確かにバッチリなのでスキャン対象からUnityを外して、、、、ってあれ、既に対象から外れているのに現象が出ています。
スキャン対象外としているのはここ。



どうやら、相当前に自分でやった作業を忘れていたのかも。

さらにググるとこんな記事も。

Unity Community
http://forum.unity3d.com/threads/172759-Unity-4-0-1f2-and-avast-8-0-1482-quot-getThreadContextfailed-quot-error/page3

Unity4でも出ているらしく、あちこちで困っているようです。
内容を読むに、UnityでもAvastでもESETでもなく、Monoエンジンのコアにスレッドセーフ関連の問題があるそうで。
アンチウイルスを別のものにしても良いそうなんですが面倒。

対策としてはmono.dllを置き換えると良いのだそうです。

https://docs.google.com/a/unity3d.com/file/d/0Bz4rtnpF8SvMNm0tLUpRdUxrVzA/edit

上のアドレスが直リンクのmono.dll。
これを、以下の場所に置いて書き換えるとの事。

 (Unityのインストール先)\Editor\Data\Mono\EmbedRuntime\

これはUnity4.1でのみ対処可能なdllらしく、他での保証は無いみたいですね。
セキュリティもどうなるやら。

もう1点、Windows7が安定してるのを良い事に、良くスリープ復帰させています。
これも中で何が起きているのかわかりませんが、発生頻度を上げるようです。

どうもUnity3.5での挙動も含め解決になってないので、このdllを含め、今後再度検証予定。

0 件のコメント:

コメントを投稿