2

Mono ランタイムを既存の Cocoa アプリケーションに埋め込んでいます。GitHub (マスター ブランチ) から最新のランタイムをビルドし、マネージ コードを実行した後にアプリケーションを終了すると、mono_jit_cleanup() 中に次のようになります。

https://dl.dropbox.com/u/108566029/BAD_ACCESS.png

HttpWebRequest 経由で HTTP リクエストを送信しようとしたときにのみ再現されます。具体的には、GetRequestStream() を呼び出すとします。コードは正常に機能し、すべての管理対象オブジェクトが正しく破棄されます。mono_jit_cleanup() は一度だけ呼び出されます。この問題は、ランタイムのシャットダウン中にのみ発生します。

これは、最新の Mono 2.10.x ブランチでも再現されています。しかし、私はSIGSEGVを取得します。

これはさまざまな場所で発生する可能性があるため、スレッドの問題のようです。

では、ランタイムを正しくシャットダウンするにはどうすればよいですか。mono_jit_cleanup() 呼び出しは、ランタイムを正しく破棄するのに十分ですか? また、ランタイムを破棄せずに (mono_jit_cleanup() 呼び出しなしで) アプリケーションを終了できますか?



PS
私は、OSX 10.8.3でMono v2.0(実際には3.5)ランタイムの32ビットビルドを使用しています。libmono-2.0.1.dylib に対してリンクしているので、Boehm GC のはずです。同じ問題が SGen GC でも再現されます。

PPS
別のエラーが発生します https://dl.dropbox.com/u/108566029/SIGABRT.png

4

1 に答える 1

0

標準の mono 実行可能ファイルは mono_jit_cleanup() を問題なく呼び出すため、呼び出している正確なコード、どのスレッドなどについて詳しく知る必要があります。

いずれにせよ、その関数を呼び出さずにアプリケーションを終了できます。

于 2013-04-06T09:43:18.760 に答える