Skip to content

Commit 82c1a7f

Browse files
committed
Remove dependency on Atomic
1 parent ecd97ac commit 82c1a7f

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

Gemfile

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ source 'https://rubygems.org'
22

33
gemspec
44

5-
group :actress do
6-
gem 'atomic'
7-
end
85

96
group :development do
107
gem 'rake', '~> 10.2.2'

lib/concurrent/actress.rb

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
require 'atomic'
21
require 'logger'
32

43
module Concurrent
@@ -152,7 +151,7 @@ def initialize(parent, name, actress_class, *args, &block)
152151
@executor = Concurrent.configuration.global_task_pool # TODO configurable
153152
@parent_core = (Type! parent, Reference, NilClass) && parent.send(:core)
154153
@name = (Type! name, String, Symbol).to_s
155-
@children = Atomic.new []
154+
@children = []
156155
@path = @parent_core ? File.join(@parent_core.path, @name) : @name
157156
@logger = Logger.new($stderr) # TODO add proper logging
158157
@logger.progname = @path
@@ -180,17 +179,22 @@ def parent
180179
end
181180

182181
def children
183-
@children.get
182+
guard!
183+
@children
184184
end
185185

186186
def add_child(child)
187-
Type! child, Reference
188-
@children.update { |o| [*o, child] }
187+
guard!
188+
@children << (Type! child, Reference)
189+
self
189190
end
190191

191192
def remove_child(child)
192-
Type! child, Reference
193-
@children.update { |o| o - [child] }
193+
schedule_execution do
194+
Type! child, Reference
195+
@children.delete child
196+
end
197+
self
194198
end
195199

196200
def on_envelope(envelope)
@@ -319,14 +323,23 @@ def envelope
319323
class Root
320324
include ActorContext
321325
def on_message(message)
322-
# ignore
326+
case message.first
327+
when :spawn
328+
spawn *message[1..2], *message[3], &message[4]
329+
else
330+
#ignore
331+
end
323332
end
324333
end
325334

326335
ROOT = Core.new(nil, '/', Root).reference
327336

328337
def self.spawn(actress_class, name, *args, &block)
329-
Core.new(Actress.current || ROOT, name, actress_class, *args, &block).reference
338+
if Actress.current
339+
Core.new(Actress.current, name, actress_class, *args, &block).reference
340+
else
341+
ROOT.ask([:spawn, actress_class, name, args, block]).value
342+
end
330343
end
331344
end
332345
end

spec/concurrent/actress_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def on_message(message)
3030
actor = Actress.spawn Ping, :ping, queue
3131

3232
# when spawn returns children are set
33-
Actress::ROOT.send(:core).children.should include(actor)
33+
Actress::ROOT.send(:core).instance_variable_get(:@children).should include(actor)
3434

3535
actor << 'a' << 1
3636
queue.pop.should eq 'a'

0 commit comments

Comments
 (0)