@@ -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