[runtime] Make the stack walking code async safe when run in an async context.
[mono.git] / mono / utils / mono-stack-unwinding.h
index ffeb17408b5627ee1f5b193f2d3fe33ac6030b75..d821f3c5e32b167c5b8c868668f0cb931da592da 100644 (file)
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2008-2010 Novell, Inc.
+ * Copyright 2011 Xamarin Inc.
+ */
 #ifndef __MONO_MONO_STACK_UNWINDING_H__
 #define __MONO_MONO_STACK_UNWINDING_H__
 
@@ -21,6 +25,7 @@ typedef enum {
 typedef enum {
        MONO_UNWIND_NONE = 0x0,
        MONO_UNWIND_LOOKUP_IL_OFFSET = 0x1,
+       /* NOT signal safe */
        MONO_UNWIND_LOOKUP_ACTUAL_METHOD = 0x2,
        /*
         * Store the locations where caller-saved registers are saved on the stack in
@@ -41,16 +46,22 @@ typedef struct {
        MonoJitInfo *ji;
        /*
         * Same as ji->method.
+        * Not valid if ASYNC_CONTEXT is true.
         */
        MonoMethod *method;
        /*
         * If ji->method is a gshared method, this is the actual method instance.
         * This is only filled if lookup for actual method was requested (MONO_UNWIND_LOOKUP_ACTUAL_METHOD)
+        * Not valid if ASYNC_CONTEXT is true.
         */
        MonoMethod *actual_method;
        /* The domain containing the code executed by this frame */
        MonoDomain *domain;
        gboolean managed;
+       /*
+        * Whenever this frame was loaded in async context.
+        */
+       gboolean async_context;
        int native_offset;
        /*
         * IL offset of this frame.
@@ -59,7 +70,7 @@ typedef struct {
         */
        int il_offset;
 
-       /*The next fields are only usefull for the jit*/
+       /* The next fields are only useful for the jit */
        gpointer lmf;
        guint32 unwind_info_len;
        guint8 *unwind_info;