ruby-vips seg fault only when running rails tests in parallel
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- ruby
- Lĩnh vực
- computer-vision
Hướng nghiên cứu
Bắt đầu với test/models/image_processor_test.rb:285 và lần theo đường dẫn lời gọi qua app/models/image_processor_base.rb, app/models/image_processor_vips.rb và lib/vips/image.rb:284. Chạy các bài kiểm thử Rails liên quan với và không có song song hóa, đồng thời thu thập một bản tái hiện tối thiểu cùng báo cáo crash macOS đầy đủ. Được xem là hoàn tất khi xác định được lỗi nằm ở ruby-vips, libvips hay thiết lập kiểm thử, đồng thời ghi lại một bước tiếp theo có thể tái hiện.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
When I run tests for my rails project with parallelization enabled, ruby-vips seg faults. It works without parallelization or if I use image magick for the same image processing operations. I don't currently have a clean reproduction to share. I'm not sure what could cause this, if the issue is in my code or test data, the ruby-vips library, or vips itself. I don't know if this will affect my upcoming production debian server that will run multiple puma workers.
macOS Tahoe 26.1, M1 chip, ruby 3.4.7, rails 8.1.1, ruby-vips 2.3.0, vips 8.16.1 via homebrew.
The crash is in:
/Users/curi/.gem/ruby/3.4.7/gems/ruby-vips-2.3.0/lib/vips/image.rb:284, specifically:
loader = Vips.vips_foreign_find_load filename
from:
def self.new_from_file name, **opts
# very common, and Vips::vips_filename_get_filename will segv if we
# pass this
raise Vips::Error, "filename is nil" if name.nil?
filename = Vips.p2str(Vips.vips_filename_get_filename(name))
option_string = Vips.p2str(Vips.vips_filename_get_options(name))
loader = Vips.vips_foreign_find_load filename
raise Vips::Error if loader.nil?
Operation.call loader, [filename], opts, option_string
end
Here's part of a crash log:
981c00000-982000000 rw-
982000000-982400000 rw-
982400000-982800000 rw-
982800000-982c00000 rw-
982c00000-983000000 rw-
983000000-983400000 rw-
983400000-c7e000000 ---
c96000000-c96400000 rw-
c96400000-c96800000 rw-
c96800000-c96b00000 rw-
c96c00000-c96f00000 rw-
c97000000-c97600000 rw-
c97800000-c97c00000 rw-
c97c00000-c98000000 rw-
c98000000-c98774000 rw-
fc0000000-1000000000 ---
1000000000-7000000000 ---
[IMPORTANT]
Don't forget to include the Crash Report log file under
DiagnosticReports directory in bug reports.
./Users/curi/.gem/ruby/3.4.7/gems/ruby-vips-2.3.0/lib/vips/image.rb:284: [BUG] Segmentation fault at 0x0000000122c50853
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +YJIT +PRISM [arm64-darwin25]
-- Crash Report log information --------------------------------------------
See Crash Report log file in one of the following locations:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
-- Control frame information -----------------------------------------------
c:0034 p:---- s:0184 e:000183 CFUNC :vips_foreign_find_load
c:0033 p:0044 s:0179 e:000178 METHOD /Users/curi/.gem/ruby/3.4.7/gems/ruby-vips-2.3.0/lib/vips/image.rb:284
c:0032 p:0006 s:0170 e:000169 METHOD /Users/curi/w/c/redacted/app/models/image_processor_vips.rb:13
c:0031 p:0024 s:0163 e:000162 METHOD /Users/curi/w/c/redacted/app/models/image_processor_base.rb:17 [FINISH]
c:0030 p:---- s:0155 e:000154 CFUNC :new
c:0029 p:0047 s:0148 e:000147 METHOD /Users/curi/w/c/redacted/app/models/image_processor_base.rb:30
c:0028 p:0010 s:0139 e:000138 BLOCK /Users/curi/w/c/redacted/test/models/image_processor_test.rb:285
c:0027 p:0012 s:0127 e:000126 BLOCK /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:95
c:0026 p:0002 s:0124 e:000123 METHOD /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:191
c:0025 p:0004 s:0119 e:000118 BLOCK /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:90
c:0024 p:0008 s:0116 e:000115 METHOD /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:382
c:0023 p:0004 s:0111 e:000110 METHOD /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:89
c:0022 p:0006 s:0107 e:000106 BLOCK /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/executor/test_helper.rb:5
c:0021 p:0012 s:0104 e:000103 METHOD /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/execution_wrapper.rb:104
c:0020 p:0009 s:0099 e:000098 METHOD /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/executor/test_helper.rb:5
c:0019 p:0008 s:0094 e:000093 METHOD /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:1223
c:0018 p:0008 s:0087 e:000086 BLOCK /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:50
c:0017 p:0022 s:0084 E:002470 METHOD /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:487
c:0016 p:0014 s:0076 e:000075 METHOD /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:474
c:0015 p:0049 s:0070 E:001f68 METHOD /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:49
c:0014 p:0011 s:0061 e:000060 METHOD /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:38
c:0013 p:0043 s:0056 e:000055 BLOCK /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:27 [FINISH]
c:0012 p:---- s:0053 e:000052 CFUNC :fork
c:0011 p:0004 s:0049 e:000048 METHOD /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:15
c:0010 p:0011 s:0045 e:000044 BLOCK /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization.rb:50 [FINISH]
c:0009 p:---- s:0041 e:000040 IFUNC
c:0008 p:0024 s:0038 e:000036 METHOD <internal:numeric>:257 [FINISH]
c:0007 p:---- s:0032 e:000031 CFUNC :each
c:0006 p:---- s:0029 e:000028 CFUNC :map
c:0005 p:0012 s:0025 e:000024 METHOD /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization.rb:49
c:0004 p:0023 s:0021 e:000020 METHOD /Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelize_executor.rb:19
c:0003 p:0128 s:0017 e:000016 METHOD /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:298
c:0002 p:0045 s:0008 E:002300 BLOCK /Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:85 [FINISH]
c:0001 p:0000 s:0003 E:000be0 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:85:in 'block in autorun'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:298:in 'run'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelize_executor.rb:19:in 'start'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization.rb:49:in 'start'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization.rb:49:in 'map'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization.rb:49:in 'each'
<internal:numeric>:257:in 'times'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization.rb:50:in 'block in start'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:15:in 'start'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:15:in 'fork'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:27:in 'block in start'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:38:in 'work_from_queue'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:49:in 'perform_job'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:474:in 'with_info_handler'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:487:in 'on_signal'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/testing/parallelization/worker.rb:50:in 'block in perform_job'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:1223:in 'run_one_method'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/executor/test_helper.rb:5:in 'run'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/execution_wrapper.rb:104:in 'perform'
/Users/curi/.gem/ruby/3.4.7/gems/activesupport-8.1.1/lib/active_support/executor/test_helper.rb:5:in 'block in run'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:89:in 'run'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest.rb:382:in 'time_it'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:90:in 'block in run'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:191:in 'capture_exceptions'
/Users/curi/.gem/ruby/3.4.7/gems/minitest-5.27.0/lib/minitest/test.rb:95:in 'block (2 levels) in run'
/Users/curi/w/c/redacted/test/models/image_processor_test.rb:285:in 'block in <class:ImageProcessorTest>'
/Users/curi/w/c/redacted/app/models/image_processor_base.rb:30:in 'smartload'
/Users/curi/w/c/redacted/app/models/image_processor_base.rb:30:in 'new'
/Users/curi/w/c/redacted/app/models/image_processor_base.rb:17:in 'initialize'
/Users/curi/w/c/redacted/app/models/image_processor_vips.rb:13:in 'setup_from_path'
/Users/curi/.gem/ruby/3.4.7/gems/ruby-vips-2.3.0/lib/vips/image.rb:284:in 'new_from_file'
/Users/curi/.gem/ruby/3.4.7/gems/ruby-vips-2.3.0/lib/vips/image.rb:284:in 'vips_foreign_find_load'
-- Threading information ---------------------------------------------------
Total ractor count: 1
Ruby thread count for this ractor: 3
-- Machine register context ------------------------------------------------
x0: 0xf794951c077abd7b x1: 0x0000000000000029 x2: 0x0000000000000000
x3: 0x000000016d76e1fd x4: 0x0000000000000073 x5: 0x0000000000000073
x6: 0x0000000000000000 x7: 0xfffff0003ffff800 x18: 0x0000000000000000
x19: 0x000000016d76e1d0 x20: 0x000000010334e330 x21: 0x00000001989c0d06
x22: 0x000000016d76e1d0 x23: 0x0000000000000015 x24: 0x000000016d76e1d4
x25: 0x0000000fffffc104 x26: 0x0000000000000015 x27: 0x0000000000000014
x28: 0x0000000000000001 lr: 0x000000019064909c fp: 0x000000016d76e1c0
sp: 0x000000016d76e1b0
-- C level backtrace information -------------------------------------------
/Users/curi/.rubies/ruby-3.4.7/bin/ruby(rb_vm_bugreport+0xb6c) [0x10290461c]
/Users/curi/.rubies/ruby-3.4.7/bin/ruby(rb_bug_for_fatal_signal+0x100) [0x10273d3bc]
/Users/curi/.rubies/ruby-3.4.7/bin/ruby(sigsegv+0x84) [0x102864c54]
/usr/lib/system/libsystem_platform.dylib(_sigtramp+0x38) [0x190927744]
/usr/lib/system/libsystem_trace.dylib(_os_log_find+0x28) [0x19064909c]
[0x190648dd4]
[0x19889a834]
[0x19077aac4]
[0x190763a60]
[0x1989b6830]
[0x1987e8344]
[0x1276b44d4]
[0x1276c4f54]
[0x1276b0a54]
[0x1276b0960]
[0x1273db210]
[0x12435c078]
[0x12444dcb0]
[0x12435bd70]
[0x12435bf9c]
-- Other runtime information -----------------------------------------------
* Loaded script: bin/rails
* Loaded features:
0 enumerator.so
1 thread.rb
2 fiber.so
3 rational.so
4 complex.so
5 ruby2_keywords.rb
6 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/3.4.0/arm64-darwin25/enc/encdb.bundle
7 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/3.4.0/arm64-darwin25/enc/trans/transdb.bundle
8 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/3.4.0/arm64-darwin25/rbconfig.rb
9 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/defaults.rb
10 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/deprecate.rb
11 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/errors.rb
12 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/target_rbconfig.rb
13 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/win_platform.rb
14 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/unknown_command_spell_checker.rb
15 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/exceptions.rb
16 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/basic_specification.rb
17 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/stub_specification.rb
18 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/platform.rb
19 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/specification_record.rb
20 /Users/curi/.rubies/ruby-3.4.7/lib/ruby/site_ruby/3.4.0/rubygems/util/list.rb
- Ngôn ngữ chính
- Ruby
- Star
- 904
- Fork
- 64
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của libvips/ruby-vips
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 30/100
-
cache_drop_all seg fault Đang mởbug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 42/100
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 38/100
-
blocked-upstream bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 42/100
Tất cả issue của libvips/ruby-vips
Issue tương tự
-
user-reported
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Kong/developer.konghq.com#7316 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
TheOdinProject/curriculum#31408 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
notch8/utk_knapsack#148 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
Homebrew/homebrew-cask#288729 · 1 bình luận ·
-
Test `FileUtils.options_of` Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100