Project

General

Profile

Actions

Feature #19554

open

Invalid memory access detected by Valgrind when using Fibers

Added by peterzhu2118 (Peter Zhu) about 1 year ago. Updated about 1 year ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:113032]

Description

This issue was originally reported here: https://github.com/Shopify/ruby_memcheck/issues/14

Running the script shown below using valgrind --trace-children=yes --num-callers=500 ruby test.rb outputs a lot of invalid memory access errors. I've shown a few sample errors below.

I am able to reproduce this issue on the master branch (commit 1e9a218ade), 3.2, 3.1, 3.0.

require "bundler/inline"
gemfile do
  source "https://rubygems.org"
  gem "graphql"
end

module Example
  class FooType < GraphQL::Schema::Object
    field :id, ID, null: false
  end

  class FooSource < GraphQL::Dataloader::Source
    def fetch(ids)
      ids
    end
  end

  class QueryType < GraphQL::Schema::Object
    field :foo, Example::FooType do
      argument :foo_id, GraphQL::Types::ID, required: false, loads: Example::FooType
    end

    def foo(foo: nil); end
  end

  class Schema < GraphQL::Schema
    query Example::QueryType
    use GraphQL::Dataloader

    def self.object_from_id(id, ctx)
      ctx.dataloader.with(Example::FooSource).request(id)
    end
  end
end

Example::Schema.execute(<<-GRAPHQL)
{
  foo(fooId: "Other") {
    id
  }
}
GRAPHQL
==203957== Use of uninitialised value of size 8
==203957==    at 0x3453FD: vm_exec_core (vm.inc:4411)
==203957==    by 0x357EFB: rb_vm_exec (vm.c:2366)
==203957==    by 0x354E44: invoke_block (vm.c:1384)
==203957==    by 0x355759: invoke_iseq_block_from_c (vm.c:1440)
==203957==    by 0x355759: invoke_block_from_c_proc (vm.c:1538)
==203957==    by 0x355759: vm_invoke_proc (vm.c:1568)
==203957==    by 0x355DF4: rb_vm_invoke_proc (vm.c:1589)
==203957==    by 0x48F695: rb_fiber_start (cont.c:2513)
==203957==    by 0x48CCF8: fiber_entry (cont.c:831)
==203957==
==203957== Invalid write of size 8
==203957==    at 0x48C407: fiber_pool_stack_reset (cont.c:325)
==203957==    by 0x48C4E9: fiber_pool_vacancy_reset (cont.c:364)
==203957==    by 0x48CBB0: fiber_pool_stack_release (cont.c:752)
==203957==    by 0x48CECF: fiber_stack_release (cont.c:874)
==203957==    by 0x48FC9F: fiber_switch (cont.c:2726)
==203957==    by 0x4901F9: fiber_resume_kw (cont.c:2906)
==203957==    by 0x490235: rb_fiber_resume_kw (cont.c:2912)
==203957==    by 0x4903B7: rb_fiber_m_resume (cont.c:2973)
==203957==    by 0x3337D6: ractor_safe_call_cfunc_m1 (vm_insnhelper.c:3166)
==203957==    by 0x33440A: vm_call_cfunc_with_frame_ (vm_insnhelper.c:3357)
==203957==    by 0x3345E1: vm_call_cfunc_with_frame (vm_insnhelper.c:3385)
==203957==    by 0x3398E5: vm_sendish (vm_insnhelper.c:5225)
==203957==    by 0x341203: vm_exec_core (insns.def:835)
==203957==    by 0x357EFB: rb_vm_exec (vm.c:2366)
==203957==    by 0x354E44: invoke_block (vm.c:1384)
==203957==    by 0x355759: invoke_iseq_block_from_c (vm.c:1440)
==203957==    by 0x355759: invoke_block_from_c_proc (vm.c:1538)
==203957==    by 0x355759: vm_invoke_proc (vm.c:1568)
==203957==    by 0x355DF4: rb_vm_invoke_proc (vm.c:1589)
==203957==    by 0x48F695: rb_fiber_start (cont.c:2513)
==203957==    by 0x48CCF8: fiber_entry (cont.c:831)
==203957==  Address 0x9bad008 is in a rw- anonymous segment
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like1Like0