Using IO or rescuing exceptions when setting a timeout
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 35/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- javascript, ruby
调研方向
Start by reading stop_attached and def timeout(&blk) in MiniRacer, the two entry points named in the report. Reproduce the attached callback with a timeout, IO, and a rescued exception, then compare the reported termination errors; done means identifying why timeout handling changes the callback outcome and documenting or fixing the behavior.
由索引模型根据 Issue 内容生成。
描述
Hello everyone :)
I've ran into a curious issue when setting a timeout at context creation. The underlying timeout detection doesn't seem to allow for rescue exceptions in attached methods, nor using IO.
Here is an example :
def download_base64(url)
data = URI.open(url)
data = Base64.encode64(data&.read || "")
{ data: data }
rescue => e
{ error: e.to_s }
end
js_context = MiniRacer::Context.new(timeout: 10)
js_context.attach('download64', proc { |url|
download_base64(url)
})
begin
result = js_context.call('download64', 'https://google.com/favicon.ico')
puts "RESULT: #{result}"
rescue => e
puts "ERROR: #{e}"
end
The code above ends up outputting:
ERROR: JavaScript was terminated (either by timeout or explicitly)
If I remove the rescue from the download_base64 ruby method, the output turns into :
ERROR: Terminated during callback
I have traced the error above to stop_attached inside MiniRacer.
If I remove the timeout, the result is a base64 encoded string of the Google's favicon.
I have disabled the timeout for now but would be very interesting to understand what goes on behind the scene. I have tried to go into the def timeout(&blk) method, and I am not sure why the current code there doesn't work, it doesn't seem to do anything you wouldn't expect it do it.
- 主要语言
- JavaScript
- 星标
- 628
- 派生
- 100
- 平均合并
- 1 天 20 小时
- 30 天内合并 PR
- 2
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
rubyjs/mini_racer 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 76/100
rubyjs/mini_racer#449 ·
-
难度 4/5 3-5 天 新手友好度 52/100
rubyjs/mini_racer#450 ·
-
难度 4/5 3-5 天 新手友好度 52/100
rubyjs/mini_racer#448 ·
-
bug/crash platform: linux/x86
难度 4/5 3-5 天 新手友好度 42/100
rubyjs/mini_racer#422 · 10 条评论 ·
-
platform: darwin/x86
难度 4/5 3-5 天 新手友好度 35/100
rubyjs/mini_racer#388 · 4 条评论 ·
查看 rubyjs/mini_racer 的全部 Issue
相似的 Issue
-
type/bug
难度 2/5 1-3 小时 新手友好度 84/100
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 66/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 67/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
rescript-lang/rescript#8996 ·
维护者通常 1 天内回复
-
check:passed logos:add
难度 2/5 1-3 小时 新手友好度 68/100