@@ -962,7 +962,9 @@ def exception(*args)
962
962
if reason . size > 1
963
963
Concurrent ::MultipleErrors . new reason
964
964
else
965
- reason [ 0 ] . exception ( *args )
965
+ ex = reason [ 0 ] . exception ( *args )
966
+ ex . set_backtrace ex . backtrace + caller
967
+ ex
966
968
end
967
969
end
968
970
@@ -1382,8 +1384,8 @@ def self.new_blocked_by1(blocker, *args, &block)
1382
1384
blocker_delayed = blocker . promise . delayed
1383
1385
delayed = blocker_delayed ? LockFreeStack . new . push ( blocker_delayed ) : nil
1384
1386
promise = new ( delayed , 1 , *args , &block )
1385
- ensure
1386
1387
blocker . add_callback :callback_notify_blocked , promise , 0
1388
+ promise
1387
1389
end
1388
1390
1389
1391
def self . new_blocked_by2 ( blocker1 , blocker2 , *args , &block )
@@ -1400,16 +1402,16 @@ def self.new_blocked_by2(blocker1, blocker2, *args, &block)
1400
1402
blocker_delayed2 ? LockFreeStack . of1 ( blocker_delayed2 ) : nil
1401
1403
end
1402
1404
promise = new ( delayed , 2 , *args , &block )
1403
- ensure
1404
1405
blocker1 . add_callback :callback_notify_blocked , promise , 0
1405
1406
blocker2 . add_callback :callback_notify_blocked , promise , 1
1407
+ promise
1406
1408
end
1407
1409
1408
1410
def self . new_blocked_by ( blockers , *args , &block )
1409
1411
delayed = blockers . reduce ( nil , &method ( :add_delayed ) )
1410
1412
promise = new ( delayed , blockers . size , *args , &block )
1411
- ensure
1412
1413
blockers . each_with_index { |f , i | f . add_callback :callback_notify_blocked , promise , i }
1414
+ promise
1413
1415
end
1414
1416
1415
1417
def self . add_delayed ( delayed , blocker )
0 commit comments