2009-10-24 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / mini-exceptions.c
index 9a7fe53f6a8d30f529010337df9b6fb38c2dc16b..3f6f884fbabb9c2f77a0bdee800a78be5d0032ef 100644 (file)
@@ -855,24 +855,34 @@ get_exception_catch_class (MonoJitExceptionInfo *ei, MonoJitInfo *ji, MonoContex
  * mini_jit_info_table_find:
  *
  *   Same as mono_jit_info_table_find, but search all the domains of the current thread
- * if ADDR is not found in DOMAIN.
+ * if ADDR is not found in DOMAIN. The domain where the method was found is stored into
+ * OUT_DOMAIN if it is not NULL.
  */
 MonoJitInfo*
-mini_jit_info_table_find (MonoDomain *domain, char *addr)
+mini_jit_info_table_find (MonoDomain *domain, char *addr, MonoDomain **out_domain)
 {
        MonoJitInfo *ji;
        MonoInternalThread *t = mono_thread_internal_current ();
        GSList *l;
 
+       if (out_domain)
+               *out_domain = NULL;
+
        ji = mono_jit_info_table_find (domain, addr);
-       if (ji)
+       if (ji) {
+               if (out_domain)
+                       *out_domain = domain;
                return ji;
+       }
 
        for (l = t->appdomain_refs; l; l = l->next) {
                if (l->data != domain) {
                        ji = mono_jit_info_table_find ((MonoDomain*)l->data, addr);
-                       if (ji)
+                       if (ji) {
+                               if (out_domain)
+                                       *out_domain = (MonoDomain*)l->data;
                                return ji;
+                       }
                }
        }