-
Notifications
You must be signed in to change notification settings - Fork 62
Open
Labels
Description
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