Date | Commit message (Collapse) |
|
doc: update URLs to point to YHBT.net
bogomips.org is going away since .org isn't going to
be affordable, anymore. While we're at it, stop requiring
olddoc to just build the gem.
|
|
bogomips.org is going away since .org isn't going to
be affordable, anymore. While we're at it, stop requiring
olddoc to just build the gem.
|
|
This release fixes mismatched indentation warnings in
Ruby 2.6+. There are also some minor doc updates.
Of course, all the relevant functionality is also in the
"sleepy_penguin" RubyGem. So chances are you won't need
this package and increase overhead from DSOs(*)
4 changes since v4.4.0
io/splice: fix mismatched indentation warnings
pkg.mk: build system updates
doc: update URLs to HTTPS and remove refs to mail software
README: add a note on sleepy_penguin providing splice + tee
(*) https://udrepper.livejournal.com/8790.html
|
|
|
|
No need to market or promote anything, here.
|
|
Mainly, pass --local to "'gem install"
|
|
Ruby 2.6.0dev warns about these
|
|
Most notably the mailing list is now subscription-optional
on the bogomips.org server:
ruby-io-splice@bogomips.org
If you want to keep receiving email updates, you'll need to
resubscribe by sending a message to:
ruby-io-splice+subscribe@bogomips.org
Migrating subscribers can't be done automatically as librelist
(our old host) doesn't publish subscriber lists. But you don't
have to subscribe, either, HTTP archives are available at:
http://bogomips.org/ruby-io-splice/
There you'll also find links to ssoma/public-inbox for
extracting the mail archives to git.
shortlog:
move mailing list to ruby-io-splice@bogomips.org
switch documentation to olddoc
pack internal structs for 64-bit systems
favor comparisons against zero instead of -1
doc updates
Again, the io_splice 5.x will remove the mistake of the
IO::Splice.copy_stream method. Users are encouraged to use
IO.copy_stream in Ruby (1.9+) itself instead.
|
|
Old wrongdoc cruft, update for olddoc.
|
|
Remove LATEST from being rdoc-ed at all, and update the
(mostly useless) private email address.
|
|
This should allow faster instructions to be used in some cases.
Technically this may be less pedantically correct, but there is
enough existing code out there which does the same thing to
discourage kernel/libc developers from overloading negative
return values.
...And glibc even favors comparison against zero, too.
|
|
This reduces stack usage in some places, perhaps providing a
miniscule improvement in GC performance.
struct before after difference
splice_args 48 40 8
vmsplice_args 32 24 8
|
|
wrongdoc was difficult to maintain because of the tidy-ffi
dependency and the HTML5 changes in Darkfish could not be
handled well by Tidy.
olddoc is superior as it generates leaner HTML which loads faster,
requires less scrolling and less processing power to render.
Aesthetic comparisons are subjective of course but completely
unimportant compared to speed and accessibility.
ref: http://80x24.org/olddoc/
|
|
The public-inbox + mlmmj setup on bogomips.org allows posting
without subscription and offers downloadable archives via git.
The lack of rsyncable archives on librelist nowadays and
subscription-required nature of librelist are points against it.
Repliers are now encouraged to Cc: all recipients (using the
reply-all function of their mail client) since many readers are
not subscribed.
This project has never accepted or encouraged HTML email, but
librelist accepted it. The bogomips.org mail server is
configured to treat HTML mail as spam, so do not send HTML mail
if you expect a response.
Users who wish to subscribe may send a message to:
ruby-io-splice+subscribe@bogomips.org
Similarly, they may unsubscribe via:
ruby-io-splice+unsubscribe@bogomips.org
HTTP archives are available via:
http://bogomips.org/ruby-io-splice/
ssoma users may also use: git://bogomips.org/ruby-io-splice
(see README change)
Old messages to the librelist addresses will continue to
get routed to the new mailing list.
ref: http://public-inbox.org/
|
|
This release fixes compatibility with Ruby trunk r44955 and onwards.
There are also numerous cleanups.
Note: usage of IO::Splice::WAITALL is deprecated and will be removed
in 5.x along with IO::Splice.copy_stream.
|
|
rb_thread_blocking_region is not in ruby trunk as of r44955
|
|
This functionality should not be implemented in Ruby, at least.
This flag could also conflict with future flags used by the
underlying syscalls.
|
|
It is deprecated, so stop testing and advertising it.
|
|
It'll be OK to use rb_thread_call_without_gvl when
rb_thread_blocking_region is not detectable at all.
We still use rb_thread_blocking_region for Ruby 2.0-2.1 because
rb_thread_call_without_gvl was detectable in 1.9.3, but not
usable as an internal symbol.
ref: https://bugs.ruby-lang.org/issues/9502
|
|
RAA is dead
|
|
In case somebody finds vmsplice useful in Ruby, we avoid incurring
the performance loss from RARRAY_PTR under Ruby 2.1.0 and Rubinius.
However, I still haven't found a useful use of vmsplice under
Ruby (or any high-level languages).
|
|
Newer versions of Rubinius generate files in .rbx.
|
|
In retrospect, these methods are too infrequently useful and
causes problems too easily to be worth supporting.
|
|
This prevents a file descriptor leak in case another thread
forks and execs while we are in the middle of loading. This
places a hard dependency on pipe2, but pipe2 appeared in Linux
before pipe size modification.
|
|
We now limit maximum splice length to (1<<30) to avoid EINVAL
errors on 64-bit hosts.
vmsplice no longer raises Errno::EFAULT optimizations in newer
GCC (not that I've found a good use for vmsplice at all with
Ruby...)
There are several other small cleanups.
Eric Wong (6):
copy_stream: small cleanup for pipe splicing
limit maximum splice length to 1 << 30
avoid uname() for pipe size modification checks
doc: s/librelist.com/librelist.org/
vmsplice: avoid referencing invalid stack address for strings
vmsplice: more consistent fileno retry handling
|
|
While vmsplice is hardly useful, its FD-closed-while-GVL-less
handling should be as good as our splice and tee wrappers.
|
|
Newer GCC more aggressively optimizes stack allocations away,
so we need to avoid passing out-of-scope addresses to vmsplice.
Not that vmsplice is useful in Ruby...
|
|
.org makes us look less commercial, which may be
important to some folks. Yes, this project is
run by a dirty hippie.
|
|
The uname comparison is fragile and we can better
detect this during the Init_* function by just using
a pipe.
|
|
This is the same value haproxy has to work around the same
issue on 64-bit platforms.
ref: a9de333aa58e6cb76f08a50e8ba2c5931184068f in
http://git.1wt.eu/git/haproxy.git
|
|
No need to loop on IO::Splice.full, it already loops
internally whenever it makes sense.
|
|
IO::Splice.copy_stream now uses SPLICE_F_NONBLOCK whenever the
destination is a pipe. Our documentation is also updated to
reflect the issue of splicing from sockets into pipes.
ref: http://lkml.org/lkml/2009/1/13/478
|
|
We should warn our users to avoid a blocking splice() from a
socket into a pipe if the socket buffers are full unless there's
a blocking read/splice on the other end of the pipe.
|
|
The pipe may be full from small buffers due to how TCP
works, so we need to use non-blocking I/O on the pipe.
ref: http://lkml.org/lkml/2009/1/13/478
|
|
IO::Splice.copy_stream coerces based on the availability of
the #to_path method in source and destination arguments.
This is to be compatible with IO.copy_stream and also
Rack::File since this may be used in web servers.
This is NOT visible with Ruby 1.8 since File.open
doesn't coerce with #to_path on the given object.
|
|
This is to be compatible with IO.copy_stream and also
Rack::File since this may be used in web servers.
This is NOT compatible with Ruby 1.8 since File.open
doesn't coerce with #to_path on the given object.
|
|
Methods now automatically retry on EINTR after checking
IO#closed? and executing interrupts.
There is a new IO::Splice::WAITALL flag (implemented in
userspace) which may be used to cause IO.splice and IO.tee
to retry (while the GVL is released) until the operation
is complete.
IO::Splice.copy_stream now works correctly for large copies
if source offset is specified.
MRI 1.8 is only weakly supported now, MRI 1.9 is the
preferred platform though Rubinius appears to work, too.
|
|
We support both, but IO objects are easier to use so
refer to those in the documentation.
|
|
This way at least 1.8 users can have something akin to
IO.copy_stream.
|
|
And enable UNIX socket tests for this
|
|
This helps flesh out some inconsistencies between our
implementation and IO.copy_stream in MRI. Some things
we won't care about though, like userspace buffering.
|
|
Oops :x
|
|
This reduces Ruby method dispatches
|
|
timeout doesn't seem to interrupt C extensions reliably
in some cases...
|
|
This allows splice-in-full and tee-in-full behavior
to simplify user code.
|
|
Also works under Rubinius
|
|
Easier to read this way since it matches upstream
functions.
|
|
Not that we feel like supporting 1.8 any longer..
|
|
We don't want to retry with the same FD if it somehow
got closed and reopened in a different thread. We
could possibly have Errno::EBADF, too, but
rb_thread_io_blocking_region doesn't allow multiple
file descriptors...
|
|
No chance in hell a file descriptor can be a Bignum...
|