Bug 2150 - Segmentation fault when freeing DynanicMethod
Summary: Segmentation fault when freeing DynanicMethod
Alias: None
Product: Runtime
Classification: Mono
Component: Reflection ()
Version: unspecified
Hardware: PC Linux
: --- normal
Target Milestone: ---
Assignee: Bugzilla
Depends on:
Reported: 2011-11-22 05:00 UTC by Maciej Paszta
Modified: 2011-12-22 19:15 UTC (History)
2 users (show)

Is this bug a regression?: ---
Last known good build:

Test case (553 bytes, text/plain)
2011-11-22 05:00 UTC, Maciej Paszta
Call mono_debug_remove_method only when debugger is initialized (481 bytes, patch)
2011-11-22 06:24 UTC, Maciej Paszta

Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.

Please create a new report on GitHub or Developer Community with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:

Description Maciej Paszta 2011-11-22 05:00:50 UTC
Created attachment 926 [details]
Test case

Mono from 2.10 branch segfaults while exiting  from application that uses DynamicMethod (or more generally - when runtime decides to free the DynamicMethod):

* Assertion at mono-debug-debugger.c:68, condition `initialized' not met


Native stacktrace:

        mono() [0x491d71]
        /lib/x86_64-linux-gnu/libpthread.so.0(+0xf020) [0x7fed08fbb020]
        /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x35) [0x7fed08c5a405]
        /lib/x86_64-linux-gnu/libc.so.6(abort+0x180) [0x7fed08c5d680]
        mono() [0x5c9d3e]
        mono() [0x5c9ea5]
        mono() [0x5568ab]
        mono(mono_debug_remove_method+0x28) [0x557e98]
        mono() [0x417fb4]
        mono() [0x55d1d2]
        mono() [0x56a060]
        mono() [0x50fbe8]
        mono() [0x5913e7]
        mono() [0x5bb562]
        mono() [0x5e0f28]
        /lib/x86_64-linux-gnu/libpthread.so.0(+0x6b40) [0x7fed08fb2b40]
        /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7fed08cfd36d]

Mono compiled from official 2.10.6 sources doesn't show such problem. Probably the commit that is causing this error is ad8e7c929f53542c571f54b60e69aad47d4cdf1a (this is just a wild guess but it seems to change (mono_debug_remove_method) implementation.
Comment 1 Maciej Paszta 2011-11-22 05:59:39 UTC
Running provided example with --debug switch prevents mono from segfaulting.
Comment 2 Maciej Paszta 2011-11-22 06:24:12 UTC
Created attachment 927 [details]
Call mono_debug_remove_method only when debugger is initialized

mono_debug_remove_method code will only be called when mono_debug_initialized is set. Since I'm not much into mono runtime I'm not sure whether some variables should not be g_freed in case mono is not run with --debug flag.
Comment 3 Zoltan Varga 2011-11-22 17:01:33 UTC
Fixed in HEAD/2.10 branch.