Project

General

Profile

Bug #15448

Updated by nobu (Nobuyoshi Nakada) about 5 years ago

```console ``` 
 $ ./miniruby -e ' 
 begin 
   raise "foo" 
 rescue => e1 
   begin 
     raise "bar" 
   rescue => e2 
     raise e1, cause: e2 
   end 
 end 
 ' 
 Traceback (most recent call last): 
 Traceback (most recent call last): 
 Traceback (most recent call last): 
 ... 
 ``` 

 This is caused by circular "cause" chain: 

 ```ruby ``` 
 begin 
   raise "foo" 
 rescue => e1 
   begin 
     raise "bar" 
   rescue => e2 
     begin 
       # Virtually `e1.cause = e2` which makes the cause chain circular 
       raise e1, cause: e2 
     rescue 
       p $!                     #=> #<RuntimeError: foo> 
       p $!.cause               #=> #<RuntimeError: bar> 
       p $!.cause.cause         #=> #<RuntimeError: foo> 
       p $!.cause.cause.cause #=> #<RuntimeError: bar> 
       p $!.cause.cause.object_id == $!.object_id 
     end 
   end 
 end 
 ```

Back