[ruby-core:75234] Re: [Ruby trunk Bug#12280] IO.copy_stream(IO, IO) fails with "pread() not implemented"

From: Eric Wong <normalperson@...>
Date: 2016-04-28 05:46:12 UTC
List: ruby-core #75234
naruse@airemix.jp wrote:
> Benoit Daloze wrote:
> > For me, having a message like:
> > "NotImplementedError: IO.copy_stream with offset is not supported on Windows since it is not atomic"
> > would be a good enough fix for this.
> 
> IO.copy_stream is a utility method.
> It works as expected and fast if there's a suitable API like sendfile.
> 
> On this precondition, IO.copy_stream should work even on Windows.
> You can simply acquire GVL or fine grained lock to achieve multithread safety.

Can open files be shared across processes in Windows?
If so, thread-safety is not enough; pread provides atomicity across
forked processes (and also send_io/recv_io) in *nix; not just threads.

> Anyway you can provide pread with ReadFile.
> You may know, on Windows read() is our own function and the real name is rb_w32_read.
> You can implement rb_w32_pread with ReadFile in win32/win32.c.

Anyways, I'll leave Windows devs to implement if it is possible
and safe :)

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

In This Thread

Prev Next