Date | Commit message (Collapse) |
|
Documentation updates to switch bogomips.org to yhbt.net since
the .org TLD won't be affordable in the near future. There's
also a few warning fixes and such.
|
|
bogomips.org is due to expire, soon, and I'm not willing to pay
extortionists at Ethos Capital/PIR/ICANN to keep a .org. So
it's at yhbt.net, for now... Identity is overrated.
|
|
rb_ensure takes VALUE args, not "void *"
|
|
GC works unpredictably, so we need to track and close
IO objects themselves.
|
|
(forgot to commit for a few months)
|
|
There is no "trysplice" method, here. Instead, we rely on the
F_NONBLOCK and "exception: false" keyword argument.
|
|
This release fixes some minor things for kqueue and clang
users. Not much going on... *yawn*
6 changes since v3.5.0 (2017-03-22):
kqueue: ensure close-on-exec flag is set
kqueue: modernize Struct usage for Ruby 2.5.0dev
fix 64-to-32-bit truncation warning
kqueue: get rid of unused variable warnings
epoll: avoid reduce block capture and ivar requests
doc: use HTTPS URLS when possible
|
|
It should give some layer of protection against MITM attacks
and snooping.
|
|
Bytecode golfing...
|
|
|
|
4GB thread-local-storage should be enough for anyone, right?
|
|
Ruby 2.4 deprecates old macros, and it looks like 2.5.0 will
remove RSTRUCT_PTR.
|
|
Calling IO::new apparently does not set the close-on-exec flag
in Ruby 2.x (tested with 2.2.6 on FreeBSD), so we must set it
ourselves.
It's not a huge deal to be missing close-on-exec for kqueue,
since kqueue already has close-on-fork behavior(!) and it's rare
for a process using kqueue to exec without forking, first.
|
|
Most notably, kevent and epoll_wait wrappers are now
nestable, so you can write your own event loops inside
somebody elses event loop (not that it's a good idea,
but hey, that's reality, sometimes).
https://bogomips.org/sleepy_penguin/SleepyPenguin/Kqueue.html#method-i-kevent
https://bogomips.org/sleepy_penguin/SleepyPenguin/Epoll.html#method-i-wait
For Linux users, there is now copy_file_range(2) support
for copying regular files:
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#method-c-copy_file_range
There is also a new sendfile wrapper which emulates Linux
sendfile behavior regardless of platform. It will use the
native sendfile(2) syscall on FreeBSD and Linux, at least.
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#method-c-linux_sendfile
Wrappers for the splice(2) and tee(2) syscalls also exist for
Linux users (vmsplice(2) is omitted):
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#method-c-splice
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#method-c-tee
Along with some related constants:
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#F_GETPIPE_SZ
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#F_SETPIPE_SZ
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#F_MORE
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#F_MOVE
https://bogomips.org/sleepy_penguin/SleepyPenguin.html#F_NONBLOCK
In other words, this release merges the useful parts of the old
"io_splice" RubyGem: https://bogomips.org/ruby_io_splice/
Linux 4.5+ epoll users also get EPOLLEXCLUSIVE along existing
constants:
https://bogomips.org/sleepy_penguin/SleepyPenguin/Epoll.html#EXCLUSIVE
Ruby 1.8 and 1.9 support are both gone, Ruby 2.0.0+ is required
for keyword args, now(*).
31 changes since 3.4.1:
README: fix wording: are => is
TODO: add memfd item
epoll: allow :CLOEXEC instead of the long constant
note the epoll/io.rb file is only for Ruby 1.8
support the splice(2) and tee(2) syscalls
implement copy_file_range support for Linux 4.5+
doc: various URL updates (https)
unify rb_gc() handling for out-of-FD conditions
splice: clarification regarding tee() flags
pkg.mk: various updates from other projects
copy_file_range: use correct syscall numbers on x86/x86-64
new API for splice and tee
doc: remove references to IO#pipe_size accessor
remove PIPE_BUF constant definition
copy_file_range: move wrapper to Ruby for keyword arg handling
gemspec: use SPDX-compatible license specifier
implement linux_sendfile support
portability fixes for systems w/o splice, copy_file_range
tests: switch to test-unit
free buffer if pthread_setspecific fails
allow nestable TLS buffers within the same thread
drop unused Ruby 1.8 support code
epoll: add newline to Kernel#warn messages for atomicity
favor require_relative over require
epoll: add EPOLLEXCLUSIVE constant and documentation
kqueue: remove IO#autoclose= and 1.8-related checks
sp_copy: remove dummy 1.8 code for non-native threaded Ruby
build: remove build-time olddoc dependency
copy_file_range: add documentation
doc: tests and examples for changing pipe size in Linux
doc: avoid incorrect links to Epoll::IO
|
|
Most of the time, we want the core "IO" class, but rdoc wants
to be clever...
|
|
We will not implement "pipe_size" as an accessor in a core
class like the "io_splice" RubyGem did.
|
|
The public API should be documented, after all.
|
|
This should make it easier for distros to pick this
up without picking up olddoc, too.
We will still use olddoc for generating the website since it
reduces bandwidth costs, and for generating NEWS for our own
builds.
|
|
We don't even support 1.9 in the upcoming release, due to the
use of keyword args.
|
|
We only support modern Rubies, so IO#autoclose= is implicit
and we should not be wasting bytecode checking for it.
|
|
I'm still not convinced this is necessary, but it's in Linux, now,
and maybe some folks will want it.
My position remains: Never put listen sockets in epoll if
you're using threads; instead, dedicate a thread to doing
nothing but _blocking_ accept4 + epoll_ctl(.. EPOLL_CTL_ADD).
Of course, if you're using something which does not have
native thread support but using multiple processes, then
yes, EPOLLEXCLUSIVE will prevent multiple processes from
turning into a thundering herd.
In other words: I would use this with Perl5, but not with Ruby 1.9+ :P
|
|
This makes it easier to avoid file name conflicts while also
improving startup performance by attempting fewer paths.
|
|
Relying on the record separator ($\ or "\n") is not atomic
on multi-process or multi-threaded systems writing to the
same log file or pipe.
|
|
Ruby 1.8 is long dead and we already broke 1.9 support by using
keyword args for splice, sendfile, and copy_file_range support.
|
|
Users may wish to use our epoll or kqueue interfaces within
their own app running on a web server or some such.
This prevents users from missing events at an increased
allocation cost.
|
|
Unlikely, but we must not leak memory if pthread_setspecific
somehow fails.
|
|
test-unit has fewer incompatible changes over the years
than minitest; and minitest seems open to making future
incompatible changes... Nope.
I value API stability more and more as I (and this project)
ages.
|
|
We need to support FreeBSD, at least.
|
|
This will also allow non-Linux users to use sendfile
if it is not available.
|
|
This makes it easier for automated checkers to check our license.
|
|
Keyword args allows for a smaller interface for common use,
while retaining the capability to use offsets for both input and
output. The current (2.4) Ruby C API for keyword args is slow
and creates too many garbage objects. As with our splice
wrapper, use a pure Ruby wrapper around an internal C function.
|
|
This was never in any released version of "sleepy_penguin",
and the same information may be queried via the 'etc'
extension since Ruby 2.2:
require 'etc'
IO.pipe { |r, w| w.pathconf(Etc::PC_PIPE_BUF) }
|
|
This is a part of the "io_splice" RubyGem we will not be
supporting in "sleepy_penguin".
|
|
Since we're breaking away from the old io_splice gem,
we have liberty to change the API when moving to a new
namespace. This might allow us to simplify the common
case args and reduce the amount of C code we maintain.
|
|
I had a recent linux-libc-dev installed with my kernel, so I did
not notice these mistakes until I installed only an updated
kernel without the headers. The old number (285) is the generic
base syscall number.
|
|
* remove isolate support, we do not use or need it
* allow "make check" as an alias for "make test"
This is for muscle-memory compatibility with autotool projects
* avoid network access during local gem install
|
|
It's not our fault, it's the kernels :P
|
|
This should hopefully simplify logic a bit and avoid expensive
access to errno.
|
|
HTTPS provides some degree of additional security. We'll also
document our NNTP mail archive mirror, too.
Additionally, this places some additional load on our yahns
instance running bogomips.org, meaning additional testing
for sleepy_penguin :)
|
|
Under Linux 4.5, this allows for efficient copies and
is similar to the splice and sendfile system calls.
|
|
Since these are Linux-specific syscalls, it makes sense to
include it here. This is taken from the "io_splice" RubyGem,
but this may supercede that.
Note: this does not include a vmsplice(2) wrapper
|
|
I was reading the code after a while and wonder why it
was still doing archaic things like Time.now...
I'm not sure how much longer it's worth supporting 1.8.
Maybe the next release can remove it.
|
|
The long constant name conveys no additional info. Since
epoll_create1 is rarely called, and a cache lookup for cold
code is wasfeful
|
|
memfd looks rather reasonable and non-horrible, so maybe we may
implement it more easily (unlike fanotify which requires
CAP_SYS_ADMIN).
|
|
|
|
Most notably the mailing list is now subscription-optional
on the bogomips.org server:
sleepy-penguin@bogomips.org
If you want to keep receiving email updates, you'll need to
resubscribe by sending a message to:
sleepy-penguin+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/sleepy-penguin/
There you'll also find links to ssoma/public-inbox for
extracting the mail archives to git.
shortlog:
test_kqueue_io: add test for deleting items
test_inotify: add test for rm_watch
extconf: detect inotify_init1 in libc
inotify: cleanup Inotify::Event creation
switch documentation to olddoc
change mailing list to sleepy-penguin@bogomips.org
relax license to LGPLv2.1+ (from v2.1 && v3 only)
cleanup documentation links and ignores
gemspec: add dev dependency on test-unit 3.x
README: label the link to the mailing list archives
GNUmakefile: drop more RubyForge references
README: stop mentioning Rubinius
gemspec: use minitest, not test-unit
|
|
Old wrongdoc cruft, not used in olddoc.
|
|
Most notably the mailing list is now subscription-optional
on the bogomips.org server:
sleepy-penguin@bogomips.org
If you want to keep receiving email updates, you'll need to
resubscribe by sending a message to:
sleepy-penguin+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/sleepy-penguin/
There you'll also find links to ssoma/public-inbox for
extracting the mail archives to git.
shortlog:
test_kqueue_io: add test for deleting items
test_inotify: add test for rm_watch
extconf: detect inotify_init1 in libc
inotify: cleanup Inotify::Event creation
switch documentation to olddoc
change mailing list to sleepy-penguin@bogomips.org
relax license to LGPLv2.1+ (from v2.1 && v3 only)
cleanup documentation links and ignores
gemspec: add dev dependency on test-unit 3.x
README: label the link to the mailing list archives
GNUmakefile: drop more RubyForge references
README: stop mentioning Rubinius
gemspec: use minitest, not test-unit
|
|
Oops, I got mixed up with another project and apparently
I did port this over to use minitest. Anyways I don't care
much either way.
|
|
I'm no longer willing to deal with a proprietary bug tracker
which requires accepting a Terms-of-Service. If others want
to, they can do so on our behalf and send patches/bug reports
to either project.
Contributing to sleepy_penguin will never require anything more
than the ability to send plain-text email.
|