Segfault when exiting due to `Fiddle::MemoryView`
還沒有人認領這個 Issue。
評估
研究方向
先使用提供的 Ruby 腳本重現結束時的當機,並在 GDB 下將其與 GC.start 這個替代方案進行比較。追蹤經過 memory_view.c 和 ext/fiddle/memory_view.c 的終結路徑;當腳本結束時不會發生 segmentation fault,且該回歸由適當的測試涵蓋時,即視為完成。
由索引模型根據 Issue 內容生成。
描述
The following script causes a segfault when exiting:
$workaround = false
require 'fiddle'
Fiddle::MemoryView.new(Fiddle::Pointer["foo"])
GC.start if $workaround
A backtrace from GDB:
Thread 1 received signal SIGSEGV, Segmentation fault.
rb_class_get_superclass (klass=klass@entry=0) at ../object.c:2252
2252 return RCLASS(klass)->super;
(gdb) bt
#0 rb_class_get_superclass (klass=klass@entry=0) at ../object.c:2252
#1 0x0000000589c03ae3 in lookup_memory_view_entry (klass=0) at ../memory_view.c:784
#2 0x0000000589c04921 in rb_memory_view_release (view=view@entry=0x800157770) at ../memory_view.c:836
#3 0x0000000596513c13 in fiddle_memview_free (ptr=0x800157770) at ../../../ext/fiddle/memory_view.c:41
#4 0x0000000589bd9226 in run_final (zombie=123145300985120, objspace=0x800052bc0) at ../gc.c:4040
#5 finalize_list (objspace=objspace@entry=0x800052bc0, zombie=123145300985120) at ../gc.c:4059
#6 0x0000000589bdd6e1 in rb_objspace_call_finalizer (objspace=0x800052bc0) at ../gc.c:4222
#7 0x0000000589bc5f37 in rb_ec_finalize (ec=ec@entry=0x800053520) at ../eval.c:187
#8 0x0000000589bc8e25 in rb_ec_cleanup (ec=ec@entry=0x800053520, ex=<optimized out>) at ../eval.c:298
#9 0x0000000589bc8fa8 in ruby_run_node (n=0x6fffffed3068) at ../eval.c:379
#10 0x00000001004017ad in main (argc=<optimized out>, argv=<optimized out>) at ../main.c:47
Invoking a GC before exiting seems to be a workaround.
ruby -v: ruby 3.1.0dev (2021-05-21T09:28:24Z master 50a534a152) [x86_64-linux]
- 主要語言
- Ruby
- 星號
- 195
- 分支
- 53
- PR 合併指標
- 30 天內沒有已合併 PR
環境準備
- 提供 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 沒有貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
ruby/fiddle 的其他 Issue
-
難度 3/5 1-2 天 新手友好度 52/100
-
難度 3/5 1-2 天 新手友好度 68/100
-
難度 5/5 一週以上 新手友好度 30/100
-
難度 2/5 1-3 小時 新手友好度 45/100
-
難度 2/5 1-3 小時 新手友好度 52/100
相似的 Issue
-
security
難度 2/5 1-3 小時 新手友好度 68/100
維護者通常 1 天內回覆
-
ds-drift
難度 1/5 1 小時以內 新手友好度 88/100
we-promise/sure#3934 ·
維護者通常 1 天內回覆
-
bug
難度 2/5 1-3 小時 新手友好度 72/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
維護者通常 7 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
simp/pupmod-simp-ssh#246 ·