Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: crash caused by context has been released #605

Conversation

anjihang
Copy link
Contributor

修复因context被释放后继续执行js和分发事件导致的crash

@andycall
Copy link
Member

这种情况一般在什么时候会发生?

@answershuto
Copy link
Member

是这个问题吗? #552

@answershuto
Copy link
Member

这种情况一般在什么时候会发生?

我觉得应该是有 2 个 Script,一个脚本执行了 reload 后析构了 JSContext,另一个脚本加载过来以后再去 run,会因为 JSContext 被析构了而导致 crash。

@anjihang
Copy link
Contributor Author

anjihang commented Aug 19, 2021

主要有两种情况:

  1. kraken/lib/src/dom/elements/script.dart 中 _fetchBundle 方法里面的逻辑:
    KrakenBundle bundle = await KrakenBundle.getBundle(src, contextId: elementManager.contextId);
    await bundle.eval(elementManager.contextId);
    这是个异步操作,如果kraken页面在下载jsbundle的过程中关闭,那么执行bundle.eval的时候会发生crash

  2. 在某种情况下当JSContext销毁之后,还会有地方调用 dispatchEvent 方法,导致crash

@andycall @answershuto

@anjihang
Copy link
Contributor Author

anjihang commented Aug 19, 2021

堆栈长这样:

#00 pc 00011ebc /lib/arm/libkraken_jsc.so (kraken::binding::jsc::JSContext::isValid()+15)
#01 pc 00013227 /lib/arm/libkraken_jsc.so (kraken::binding::jsc::HostClass::HostClass(kraken::binding::jsc::JSContext*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >)+146)
#02 pc 0004abbb /lib/arm/libkraken_jsc.so (kraken::binding::jsc::JSEvent::JSEvent(kraken::binding::jsc::JSContext*)+66)
#03 pc 0004aa07 /lib/arm/libkraken_jsc.so (kraken::binding::jsc::JSEvent::instance(kraken::binding::jsc::JSContext*)+174)
#04 pc 0004b319 /lib/arm/libkraken_jsc.so (kraken::binding::jsc::JSEvent::buildEventInstance(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >&, kraken::binding::jsc::JSContext*, void*, bool)+116)
#05 pc 000606c5 /lib/arm/libkraken_jsc.so (kraken::binding::jsc::NativeEventTarget::dispatchEventImpl(kraken::binding::jsc::NativeEventTarget*, NativeString*, void*, int)+260)
#06 pc 002a2118 /lib/arm/libapp.so (_kDartIsolateSnapshotInstructions+2720024)

@andycall
Copy link
Member

@anjihang 请问有兴趣加入 Kraken TSC,每月参与一次有关 Kraken 发展计划的讨论吗?

@anjihang
Copy link
Contributor Author

@anjihang 请问有兴趣加入 Kraken TSC,每月参与一次有关 Kraken 发展计划的讨论吗?

@andycall 不知道我能力够不够,我可以试着参与

@andycall
Copy link
Member

andycall commented Sep 15, 2021

OK,可以添加一下微信吗?
OK, 请问你的邮箱是啥?

@anjihang
Copy link
Contributor Author

OK,可以添加一下微信吗?
OK, 请问你的邮箱是啥?

@andycall 273770137@qq.com

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants