Closed kostya closed 11 years ago
I'm guessing this is a limitation of the present block implementation /cc @halorgium
The main issue here is the supervisor implementation, it sometimes uses blocks for configuration which show this error in exclusive
mode.
Is there a reason you are using an exclusive
block? I am guessing there is more surrounding code.
just found
exclusive :start_server
this is works, thanks.
bug remains when call method directly
require 'bundler/setup'
require 'reel'
require 'celluloid'
class A
include Celluloid
exclusive :start_server
def run
start_server
end
def start_server
@server = Reel::Server.supervise('127.0.0.1', 12345) do |connection|
while request = connection.request
connection.respond(Reel::Response.new(:ok, "Hello world"))
end
end
end
end
when
a = A.new
a.run
sleep
all is ok
when
a = A.new
a.start_server
sleep
Cannot execute blocks on sender in exclusive mode
@kostya can you try master of both Celluloid and Reel? There were some bugs in the block changes where it wasn't being reflected by Reel.
Reel's block (the one passed to initialize) should get called on Reel itself, not "A", but that's what appears to be happening.
on master all the same, run
works, start_server
fails.
except that, when stopping run
script, got (if it matter)
[2013-08-13T00:34:25.732398 #7571] DEBUG -- : Terminating 7 actors...
D, [2013-08-13T00:34:25.748397 #7571] DEBUG -- : Discarded message (mailbox is dead): #<Celluloid::ExitEvent:0x86672b0>
D, [2013-08-13T00:34:25.749087 #7571] DEBUG -- : Discarded message (mailbox is dead): #<Celluloid::TerminationRequest:0x8667738>
D, [2013-08-13T00:34:25.754866 #7571] DEBUG -- : Discarded message (mailbox is dead): #<Celluloid::TerminationRequest:0x8667990>
D, [2013-08-13T00:34:25.755403 #7571] DEBUG -- : Discarded message (mailbox is dead): #<Celluloid::ExitEvent:0x8667968>
D, [2013-08-13T00:34:25.757106 #7571] DEBUG -- : Discarded message (mailbox is dead): #<Celluloid::TerminationRequest:0x8666360>
W, [2013-08-13T00:34:25.757695 #7571] WARN -- : Terminating task: type=:call, meta={:method_name=>:run}, status=:iowait
D, [2013-08-13T00:34:25.758461 #7571] DEBUG -- : Discarded message (mailbox is dead): #<Celluloid::ExitEvent:0x86661d0>
12.rb:26:in `sleep': Interrupt
from 12.rb:26:in `<main>'
It's odd you would get this error on master as Reel is specifically configured to execute its #initialize block on itself:
https://github.com/celluloid/reel/blob/master/lib/reel/server.rb#L8
/cc @halorgium any ideas?
@kostya can you open an issue on Celluloid instead, if the issue persists in Celluloid 0.15?
0.13.0 works