Skip to content

Deadlock regression using Edge Futures chain & zip #624

@ms-ati

Description

@ms-ati

This appears to be a regression of #611

To reproduce:

gem install concurrent-ruby-edge -v 0.3.0
irb -rconcurrent-edge
Array.new(4) do 
  Concurrent::Promises.zip_futures(
    *Array.new(5) do |i|
      Concurrent::Promises.delay do 
        puts "starting #{i}"
        sleep(i)
        puts "done #{i}"
        i
      end
    end
  )
end.inject { |a, b| a.then { b }.flat }.value!

I see this output:

starting 4
starting 3
starting 2
starting 0
done 0
starting 1
done 1
done 2
done 3
done 4
fatal: No live threads left. Deadlock?
	from /Users/marcsiegel/.gem/ruby/2.3.1/gems/concurrent-ruby-edge-0.3.0/lib/concurrent/edge/promises.rb:756:in `sleep'
	from /Users/marcsiegel/.gem/ruby/2.3.1/gems/concurrent-ruby-edge-0.3.0/lib/concurrent/edge/promises.rb:756:in `wait'
	from /Users/marcsiegel/.gem/ruby/2.3.1/gems/concurrent-ruby-edge-0.3.0/lib/concurrent/edge/promises.rb:756:in `block in wait_until_resolved'
	from /Users/marcsiegel/.gem/ruby/2.3.1/gems/concurrent-ruby-edge-0.3.0/lib/concurrent/edge/promises.rb:752:in `synchronize'
	from /Users/marcsiegel/.gem/ruby/2.3.1/gems/concurrent-ruby-edge-0.3.0/lib/concurrent/edge/promises.rb:752:in `wait_until_resolved'
	from /Users/marcsiegel/.gem/ruby/2.3.1/gems/concurrent-ruby-edge-0.3.0/lib/concurrent/edge/promises.rb:1177:in `wait_until_resolved!'
	from /Users/marcsiegel/.gem/ruby/2.3.1/gems/concurrent-ruby-edge-0.3.0/lib/concurrent/edge/promises.rb:951:in `value!'
	from (irb):12
	from /Users/marcsiegel/.rubies/ruby-2.3.1/bin/irb:11:in `<main>'

  • Operating system: mac
  • concurrent-ruby version: 1.0.4
  • concurrent-ruby-ext installed: no
  • concurrent-ruby-edge used: yes (0.3.0)

Metadata

Metadata

Assignees

Labels

bugA bug in the library or documentation.

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions