[#87467] [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError — mofezilla@...
Issue #14841 has been reported by hirura (Hiroyuki URANISHI).
3 messages
2018/06/10
[#87515] [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError — hirura@...
Issue #14841 has been updated by hirura (Hiroyuki URANISHI).
7 messages
2018/06/19
[#87516] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— Eric Wong <normalperson@...>
2018/06/19
[email protected] wrote:
[#87517] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— Eric Wong <normalperson@...>
2018/06/19
Sorry, I left this out: If you can reproduce it again, can you
[#87519] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— hirura <hirura@...>
2018/06/19
Hi Eric,
[#87521] Re: [Ruby trunk Bug#14841] Very rarely IO#readpartial does not raise EOFError
— Eric Wong <normalperson@...>
2018/06/19
hirura <[email protected]> wrote:
[#87541] [Ruby trunk Feature#14859] [PATCH] implement Timeout in VM — normalperson@...
Issue #14859 has been reported by normalperson (Eric Wong).
4 messages
2018/06/21
[#87570] [Ruby trunk Feature#14859] [PATCH] implement Timeout in VM — eregontp@...
Issue #14859 has been updated by Eregon (Benoit Daloze).
4 messages
2018/06/21
[#87605] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — takashikkbn@...
Issue #14867 has been reported by k0kubun (Takashi Kokubun).
3 messages
2018/06/23
[#87614] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — normalperson@...
Issue #14867 has been updated by normalperson (Eric Wong).
4 messages
2018/06/23
[#87631] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — takashikkbn@...
Issue #14867 has been updated by k0kubun (Takashi Kokubun).
5 messages
2018/06/25
[#87635] Re: [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process
— Eric Wong <normalperson@...>
2018/06/25
[email protected] wrote:
[#87665] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — eregontp@...
Issue #14867 has been updated by Eregon (Benoit Daloze).
4 messages
2018/06/28
[#87710] [Ruby trunk Bug#14867] Process.wait can wait for MJIT compiler process — Greg.mpls@...
Issue #14867 has been updated by MSP-Greg (Greg L).
3 messages
2018/06/30
[ruby-core:87599] Re: [Ruby trunk Feature#14859] [PATCH] implement Timeout in VM
From:
Eric Wong <normalperson@...>
Date:
2018-06-22 22:06:18 UTC
List:
ruby-core #87599
[email protected] wrote: > normalperson (Eric Wong) wrote: > > [email protected] wrote: > > > Something else, I would consider Timeout to be fundamentally > > > flawed as long as it relies on Thread#raise, because it can > > > fire in the middle of an ensure block: > > > http://headius.blogspot.com/2008/02/rubys-threadraise-threadkill-timeoutrb.html > > > > We have Thread.handle_interrupt, nowadays, to control when > > interrupts fire. > Right, although it's very difficult to use correctly (for > instance, it's incorrect to use Thread.handle_interrupt inside > the ensure block) and can easily cause hangs or deadlocks. Agreed, it should be easier-to-use; but that's a separate issue and I'm trying to avoid dealing with public API design as much as possible for this. > BTW, it looks like MonitorMixin::ConditionVariable doesn't use > Thread.handle_interrupt and could continue out of #wait (with > an exception thrown by Thread#raise) without reacquiring the > lock. Can you report separately to shugo to be sure he sees it? I've never really understood the point of that module :x > It might be nice to have a Timeout variant that only > interrupts blocking IO, without relying on Thread#raise (but > just SIGVTALRM). I think that would be easier/safer to use > than the current Timeout.timeout(). Not sure how to deal if > there are multiple IO calls inside that Timeout block though. > And there could still be blocking IO in an ensure block, which > would not work as intended. Agreed, I would welcome a "soft" timeout, without using signals/raise at all. I think my work-in-progress "intrusive" [PATCH 2/1] for this will make such a thing easier-to-implement: https://80x24.org/spew/[email protected]/raw > > I considered that, too, but we'd need to add timeouts to > > every > single method which can block. There are many: File.open, > Queue#pop, SizedQueue#push, Mutex#lock/synchronize, > Process.wait*, IO#gets, IO#write, IO#read, IO#getc, > IO.copy_stream, ... > > It seems fine to me. Other implementations already have a > timeout on Queue#pop IIRC. I'm not sure we need all of them > right now (what use case for Mutex#lock/synchronize ?). I > think the main need would be for standard IO like > IO#read/write, especially on sockets and pipes. The maintenance overhead for adding timeouts to every call would be overwhelming on a human level, especially when 3rd-party libraries need to be considered. I would much rather do the following: Timeout.timeout(30) do foo.read(...) foo.write(...) IO.copy_stream(...) foo.write(...) szqueue.push(...) resultq.pop end Than this: def now Process.clock_gettime(Process::CLOCK_MONOTONIC) end begin @stop = now + 30 ... tout = @stop - now raise Timeout::Error if tout <= 0 foo.read(..., tout) tout = @stop - now raise Timeout::Error if tout <= 0 foo.write(..., tout) tout = @stop - now raise Timeout::Error if tout <= 0 IO.copy_stream(..., tout) tout = @stop - now raise Timeout::Error if tout <= 0 foo.write(..., tout) tout = @stop - now raise Timeout::Error if tout <= 0 szqueue.push(..., tout) tout = @stop - now raise Timeout::Error if tout <= 0 resultq.pop(tout) end Unsubscribe: <mailto:[email protected]?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>