Issue #17849 has been updated by Eregon (Benoit Daloze).


Another way to express the idea is that `ensure; code(); end` would automat=
ically behave like `Thread.handle_interrupt(Object =3D> :never) { code }`.
Since that would be directly in the interpreter and not actually call `Thre=
ad.handle_interrupt`, there is no worry that the interrupt happens during t=
he call to `Thread.handle_interrupt` (which would be an issue when writing =
`ensure; Thread.handle_interrupt { ... }; end`).

byroot (Jean Boussier) wrote in #note-12:
> That would fix most issues, but not all. It can also trigger in places wh=
ere exception are entirely unexpected, so there's just no `ensure`.

Do you have an example?

> Also I'm not clear on the details, but some C extensions (often various c=
lients) can't be interrupted by `Thread#raise`.

If that's the case I would argue it's a bug of the C extension (for blockin=
g without an unblocking function).
It seems very much expected that Ctrl+C always works in Ruby.

----------------------------------------
Feature #17849: Fix Timeout.timeout so that it can be used in threaded Web =
servers
https://bugs.ruby-lang.org/issues/17849#change-91971

* Author: duerst (Martin D=FCrst)
* Status: Open
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
----------------------------------------
Making this a separate issue from #17837

Eregon (Benoit Daloze) wrote in https://bugs.ruby-lang.org/issues/17837#not=
e-10 (which is  about timeouts for regular expressions):

> I think fixing Timeout.timeout might be possible.
> The main/major issue is it can trigger within `ensure`, right? Is there a=
nything else?
> We could automatically mask `Thread#raise` within `ensure` so it only hap=
pens after the `ensure` body completes.
> And we could still have a larger "hard timeout" if an `ensure` takes way =
too long (shouldn't happen, but one cannot be sure).
> I recall discussing this with @schneems some time ago on Twitter.





-- =

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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=3Dunsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>