From: samuel@...
Date: 2018-12-20T01:15:44+00:00
Subject: [ruby-dev:50722] [Ruby trunk Bug#595] Fiber ignores ensure clause

Issue #595 has been updated by ioquatix (Samuel Williams).

Assignee changed from ko1 (Koichi Sasada) to ioquatix (Samuel Williams)

While it's not possible unless we invoke functionality from the GC, if/when we merge https://bugs.ruby-lang.org/issues/10344 it should become simple to do the following

```
while fiber.alive?
    fiber.raise(Exception, "Time to die")
end
```

This would guarantee all ensure blocks are executed.

In theory you could implement `fiber.kill` which does this, and then invoke that from the GC in the finaliser.. but might be unexpected for user.

----------------------------------------
Bug #595: Fiber ignores ensure clause
https://bugs.ruby-lang.org/issues/595#change-75792

* Author: ko1 (Koichi Sasada)
* Status: Assigned
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* Target version: 
* ruby -v: -
* Backport: 
----------------------------------------

 Ruby プロセス終了時,Fiber が ensure を無視します.
 これは,前から直そうと思って手がついていなかった問題です.
 10月末までには直そうと思います.結構複雑なので,後回しにしていましました.

``` 
 fib = Fiber.new{
   begin
     Fiber.yield :ok
   ensure
     puts "should be print out"
   end
 }
 p fib.resume
```


---Files--------------------------------
ensure_fiber.patch (2.12 KB)
ensure_fiber2.patch (7.57 KB)


-- 
https://bugs.ruby-lang.org/