Встроенный моно: EXC_BAD_ACCESS (SIGSEGV) при вызове mono_jit_cleanup()

Я встраиваю среду выполнения Mono в существующее приложение Cocoa. Я создал последнюю среду выполнения из GitHub (главная ветка), и выход из приложения после запуска некоторого управляемого кода дает мне это во время mono_jit_cleanup():

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

Он воспроизводится только при попытке отправить HTTP-запрос через HttpWebRequest. В частности, если я вызову GetRequestStream(). Код работает нормально, и все управляемые объекты размещаются правильно. mono_jit_cleanup() вызывается только один раз. Проблема возникает только при завершении работы среды выполнения.

Это также воспроизводится в последней ветке Mono 2.10.x. Но тогда я получаю SIGSEGV.

Это может происходить в разных местах, поэтому похоже на проблему с потоками.

Итак, как мне правильно отключить среду выполнения. Достаточно ли вызова mono_jit_cleanup() для правильного удаления среды выполнения? И могу ли я выйти из приложения без удаления среды выполнения (без вызова mono_jit_cleanup())?



PS
Я использую 32-битную сборку среды выполнения Mono v2.0 (на самом деле 3.5) на OSX 10.8.3. Я ссылаюсь на libmono-2.0.1.dylib, поэтому это должен быть Boehm GC. Та же проблема воспроизводится и с SGen GC.

PPS
Вот еще одна ошибка https://dl.dropbox.com/u/108566029/SIGABRT.png


person dipyalov    schedule 05.04.2013    source источник


Ответы (1)


Стандартный исполняемый файл mono вызывает функцию mono_jit_cleanup(), поэтому нам нужно знать больше о том, какой именно код вы вызываете, в каком потоке и т. д.

В любом случае вы можете просто выйти из приложения, не вызывая эту функцию.

person lupus    schedule 06.04.2013