Skip to content

Commit 09cd1d2

Browse files
author
Petr Chalupa
authored
Merge pull request #621 from pitr-ch/master
Fix #620 Actors on Pool raise an error
2 parents be39a0a + e013821 commit 09cd1d2

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

lib/concurrent/actor/utils/pool.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def on_message(message)
4343
envelope_to_redirect = if envelope.future
4444
envelope
4545
else
46-
Envelope.new(envelope.message, Concurrent::Promises.future, envelope.sender, envelope.address)
46+
Envelope.new(envelope.message, Promises.resolvable_future, envelope.sender, envelope.address)
4747
end
4848
envelope_to_redirect.future.on_fulfillment! { @balancer << :subscribe } # TODO check safety of @balancer reading
4949
redirect @balancer, envelope_to_redirect

lib/concurrent/edge/promises.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -962,7 +962,9 @@ def exception(*args)
962962
if reason.size > 1
963963
Concurrent::MultipleErrors.new reason
964964
else
965-
reason[0].exception(*args)
965+
ex = reason[0].exception(*args)
966+
ex.set_backtrace ex.backtrace + caller
967+
ex
966968
end
967969
end
968970

@@ -1382,8 +1384,8 @@ def self.new_blocked_by1(blocker, *args, &block)
13821384
blocker_delayed = blocker.promise.delayed
13831385
delayed = blocker_delayed ? LockFreeStack.new.push(blocker_delayed) : nil
13841386
promise = new(delayed, 1, *args, &block)
1385-
ensure
13861387
blocker.add_callback :callback_notify_blocked, promise, 0
1388+
promise
13871389
end
13881390

13891391
def self.new_blocked_by2(blocker1, blocker2, *args, &block)
@@ -1400,16 +1402,16 @@ def self.new_blocked_by2(blocker1, blocker2, *args, &block)
14001402
blocker_delayed2 ? LockFreeStack.of1(blocker_delayed2) : nil
14011403
end
14021404
promise = new(delayed, 2, *args, &block)
1403-
ensure
14041405
blocker1.add_callback :callback_notify_blocked, promise, 0
14051406
blocker2.add_callback :callback_notify_blocked, promise, 1
1407+
promise
14061408
end
14071409

14081410
def self.new_blocked_by(blockers, *args, &block)
14091411
delayed = blockers.reduce(nil, &method(:add_delayed))
14101412
promise = new(delayed, blockers.size, *args, &block)
1411-
ensure
14121413
blockers.each_with_index { |f, i| f.add_callback :callback_notify_blocked, promise, i }
1414+
promise
14131415
end
14141416

14151417
def self.add_delayed(delayed, blocker)

0 commit comments

Comments
 (0)