celluloid / celluloid-io

UNMAINTAINED: See celluloid/celluloid#779 - Evented sockets for Celluloid actors
https://celluloid.io
MIT License
879 stars 93 forks source link

UNIXSocket: don't delegate #readline and #puts #159

Closed hannesg closed 8 years ago

hannesg commented 8 years ago

Hi there

This is pretty much the same problem as #157. Delegating these two methods prevents them from using the internal buffers and therefore may lead to blocking IO and disordered bytes.

Cheers' Hannes

ioquatix commented 8 years ago

Looks good. Another transient failure:

Failures:
  1) Celluloid::IO::Reactor shouldn't crash
     Failure/Error: Unable to find matching line from backtrace
     RuntimeError:
       Actor crashes occured (please stub/mock if these are expected): 
       ** Crash: "Actor crashed!"(#<#<Class:0x000000047a8240>: execution expired>)
         Backtrace:
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:298:in `handle_crash'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:171:in `rescue in run'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:150:in `run'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:131:in `block in start'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-essentials-f0545ce47ed9/lib/celluloid/internals/thread_handle.rb:14:in `block in initialize'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor/system.rb:78:in `block in get_thread'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:50:in `call'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:50:in `block in instantiate'
         Exception Backtrace (#<#<Class:0x000000047a8240>: execution expired>):
           (ex) /home/travis/build/celluloid/celluloid-io/lib/celluloid/io/reactor.rb:58:in `select'
           (ex) /home/travis/build/celluloid/celluloid-io/lib/celluloid/io/reactor.rb:58:in `run_once'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/mailbox/evented.rb:50:in `check'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:155:in `block in run'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/timers-53d3c5b013a9/lib/timers/group.rb:66:in `wait'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:152:in `run'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:131:in `block in start'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-essentials-f0545ce47ed9/lib/celluloid/internals/thread_handle.rb:14:in `block in initialize'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor/system.rb:78:in `block in get_thread'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:50:in `call'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:50:in `block in instantiate'

       ** Crash: "thread crashed"(#<#<Class:0x000000047a8240>: execution expired>)
         Backtrace:
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:52:in `rescue in block in instantiate'
           (crash) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:60:in `block in instantiate'
         Exception Backtrace (#<#<Class:0x000000047a8240>: execution expired>):
           (ex) /home/travis/build/celluloid/celluloid-io/lib/celluloid/io/reactor.rb:58:in `select'
           (ex) /home/travis/build/celluloid/celluloid-io/lib/celluloid/io/reactor.rb:58:in `run_once'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/mailbox/evented.rb:50:in `check'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:155:in `block in run'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/timers-53d3c5b013a9/lib/timers/group.rb:66:in `wait'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:152:in `run'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor.rb:131:in `block in start'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-essentials-f0545ce47ed9/lib/celluloid/internals/thread_handle.rb:14:in `block in initialize'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/actor/system.rb:78:in `block in get_thread'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:50:in `call'
           (ex) /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/lib/celluloid/group/spawner.rb:50:in `block in instantiate'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/bundler/gems/celluloid-7e51d7e8881e/spec/support/configure_rspec.rb:45:in `block (2 levels) in <top (required)>'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:389:in `execute_with'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:620:in `block (2 levels) in run_around_example_hooks_for'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-retry-0.4.5/lib/rspec/retry.rb:98:in `block in run'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-retry-0.4.5/lib/rspec/retry.rb:88:in `loop'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-retry-0.4.5/lib/rspec/retry.rb:88:in `run'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-retry-0.4.5/lib/rspec_ext/rspec_ext.rb:12:in `run_with_retry'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-retry-0.4.5/lib/rspec/retry.rb:22:in `block (2 levels) in setup'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:389:in `execute_with'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:620:in `block (2 levels) in run_around_example_hooks_for'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:621:in `run_around_example_hooks_for'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:478:in `run'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:388:in `with_around_example_hooks'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:430:in `with_around_and_singleton_context_hooks'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:203:in `run'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:559:in `block in run_examples'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:555:in `map'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:555:in `run_examples'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:521:in `run'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:115:in `block (3 levels) in run_specs'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:115:in `map'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:115:in `block (2 levels) in run_specs'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1627:in `with_suite_hooks'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:114:in `block in run_specs'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:77:in `report'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:113:in `run_specs'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:89:in `run'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
     # /home/travis/.rvm/gems/ruby-2.0.0-p598/gems/rspec-core-3.3.2/exe/rspec:4:in `<main>'
ioquatix commented 8 years ago

cc @digitalextremist can you dig into why it was failing?