[Mono-dev] System.Threading.Monitor::Exit fails in latest trees

Zoltan Varga vargaz at gmail.com
Fri Apr 29 09:50:04 EDT 2011


Hi,

  Those trampolines are in tramp-<ARCH>.c, they are called
monitor_enter/exit_trampoline ().

    Zoltan

On Fri, Apr 29, 2011 at 3:39 PM, Martin Daeumler <mdae at cs.tu-chemnitz.de>wrote:

> On March 10, 2010, Paolo Molaro wrote:
>
> >> Further, I traced it down into the mono 2.6.1 code tree, and
> >> mono_monitor_exit is never called. The trampoline generates the code,
> but
> >> it's never called. Can you provide a quick fix? It seems like a glaring
> >> bug.
>
> >There is no bug, on your architecture the fast path is optimized and it
> >won't go to the unmanaged function in the runtime.
>
> Hello,
>
> how does this fast path work on x86 and Mono 2.6.1? During JITing this
> code:
>
> class Test {
>        int test1;
>
>        public int callInst(Test myClass) {
>                lock (this) {
>                        myClass.test1 = 1;
>                }
>                return myClass.test1;
>        }
>
>        static int Main() {
>                Test meineKlasse = new Test();
>                int ret = meineKlasse.callInst(meineKlasse);
>                Console.WriteLine("meineKlasse: " + ret.ToString());
>                return 0;
>        }
> }
>
> , "mono_monitor_get_fast_enter_method()" and
> "mono_monitor_get_fast_exit_method()"
> are not called. While executing the method "callInst()" the unmanaged
> function
> "mono_monitor_enter()" (mono/metadata/monitor.c) is called through a
> generic
> trampoline.
>
> Q1: The generic (monitor) trampoline is not called directly by the code of
> "callInst()".
> There is a kind of wrapper that calls the generic trampoline. Where is the
> wrapper
> generated?
>
> When leaving the lock-block, i.e., calling
> "System.Threading.Monitor::Exit()" from within
> the finally-block in den CIL-code, the unmanaged function
> "mono_monitor_exit()"
> (mono/metadata/monitor.c) is not called at all. There is an ominous piece
> of
> code that
> returns to "callInst()".
>
> Q2: How is the monitor exit fast path realized? Where is the "wrapper"
> generated
> which does not call "mono_monitor_exit()"?
>
>
> With kind regards,
> Martin Däumler
>
> --
> View this message in context:
> http://mono.1490590.n4.nabble.com/System-Threading-Monitor-Exit-fails-in-latest-trees-tp1578116p3483712.html
> Sent from the Mono - Dev mailing list archive at Nabble.com.
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20110429/54c958e8/attachment.html 


More information about the Mono-devel-list mailing list