Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
ba0f8e13
R
runtime
项目概览
dotNET Platform
/
runtime
12 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
runtime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
ba0f8e13
编写于
3月 25, 2022
作者:
Z
Zoltan Varga
提交者:
GitHub
3月 25, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[mono][wasm] Store the exception object in a GC handle while it is being thrown. (#67121)
上级
cd5beb14
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
8 addition
and
2 deletion
+8
-2
src/mono/mono/mini/mini-exceptions.c
src/mono/mono/mini/mini-exceptions.c
+7
-2
src/mono/mono/mini/mini-runtime.h
src/mono/mono/mini/mini-runtime.h
+1
-0
未找到文件。
src/mono/mono/mini/mini-exceptions.c
浏览文件 @
ba0f8e13
...
...
@@ -2493,7 +2493,8 @@ mono_handle_exception_internal (MonoContext *ctx, MonoObject *obj, gboolean resu
* methods, then execute the clause and the rest of the method
* using the interpreter.
*/
jit_tls
->
resume_state
.
ex_obj
=
obj
;
g_assert
(
!
jit_tls
->
resume_state
.
ex_gchandle
);
jit_tls
->
resume_state
.
ex_gchandle
=
mono_gchandle_new_internal
((
MonoObject
*
)
obj
,
TRUE
);
jit_tls
->
resume_state
.
ji
=
ji
;
jit_tls
->
resume_state
.
clause_index
=
i
;
jit_tls
->
resume_state
.
il_state
=
frame
.
il_state
;
...
...
@@ -3579,13 +3580,17 @@ mini_llvmonly_resume_exception_il_state (MonoLMF *lmf, gpointer info)
}
jit_tls
->
resume_state
.
il_state
=
NULL
;
MonoObject
*
ex_obj
=
mono_gchandle_get_target_internal
(
jit_tls
->
resume_state
.
ex_gchandle
);
mono_gchandle_free_internal
(
jit_tls
->
resume_state
.
ex_gchandle
);
jit_tls
->
resume_state
.
ex_gchandle
=
NULL
;
/* Pop the LMF frame so the caller doesn't have to do it */
mono_set_lmf
((
MonoLMF
*
)(((
gsize
)
lmf
->
previous_lmf
)
&
~
3
));
MonoJitInfo
*
ji
=
jit_tls
->
resume_state
.
ji
;
int
clause_index
=
jit_tls
->
resume_state
.
clause_index
;
MonoJitExceptionInfo
*
ei
=
&
ji
->
clauses
[
clause_index
];
gboolean
r
=
mini_get_interp_callbacks
()
->
run_clause_with_il_state
(
il_state
,
clause_index
,
ei
->
handler_start
,
NULL
,
jit_tls
->
resume_state
.
ex_obj
,
NULL
,
MONO_EXCEPTION_CLAUSE_NONE
);
gboolean
r
=
mini_get_interp_callbacks
()
->
run_clause_with_il_state
(
il_state
,
clause_index
,
ei
->
handler_start
,
NULL
,
ex_obj
,
NULL
,
MONO_EXCEPTION_CLAUSE_NONE
);
if
(
r
)
/* Another exception thrown, continue unwinding */
mono_llvm_cpp_throw_exception
();
...
...
src/mono/mono/mini/mini-runtime.h
浏览文件 @
ba0f8e13
...
...
@@ -130,6 +130,7 @@ typedef struct {
int
first_filter_idx
,
filter_idx
;
/* MonoMethodILState */
gpointer
il_state
;
MonoGCHandle
ex_gchandle
;
}
ResumeState
;
typedef
void
(
*
MonoAbortFunction
)(
MonoObject
*
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录