Date | Commit message (Collapse) |
|
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.
|
|
|
|
Gah, so similar to the homepage URL...
|
|
This is still installed by Ruby, but in case one day it isn't,
we'll be ready.
|
|
We no longer have a ChangeLog, prefer to use powerful version
control instead.
|
|
In case I'm hit by a bus before the FSF releases the LGPLv4,
users may choose to use any newer version of the LGPL.
|
|
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:
sleepy-penguin+subscribe@bogomips.org
Similarly, they may unsubscribe via:
sleepy-penguin+unsubscribe@bogomips.org
HTTP archives are available via:
http://bogomips.org/sleepy-penguin/
ssoma users may also use: git://bogomips.org/sleepy-penguin
(see README change)
Old messages to the librelist addresses will continue to
get routed to the new mailing list.
ref: http://public-inbox.org/
|
|
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.
The presence of images and CSS on the old (Darkfish-based) site
probably set unreasonable expectations as to my ability and
willingness to view such things. No more, the new website is
entirely simple HTML which renders well with even the wimpiest
browser (hell, olddoc even tries to generate readable raw HTML).
ref: http://80x24.org/olddoc/
|
|
We'll prefer using rb_str_new2 instead of rb_str_new(...,strlen)
to save binary size. While we're at it, explain why we cannot
take e->len into account for plain-old rb_str_new.
|
|
Many systems have inotify_init1 nowadays, so use inotify_init1
if it is available to avoid unnecessary syscalls.
|
|
Ugh, unfortunately this seems buggy in some cases, but we
need to ensure the regular case works.
ref: https://lkml.org/lkml/2007/7/9/3
Subject: inotify_rm_watch() EINVAL race condition for deleted files
|
|
|
|
Most notably, this fixes memory leaks for any users of inotify
reads, epoll/kevent waiting using short-lived thread. Users of
long-lived threads for these functions (all Rainbows!, yahns, and
zbatery users) are not affected. A fair amount of internal cleanup
was necessary for this.
Compatibility with non-Linux systems without clock_gettime is
improved, thanks to Lin Jen-Shin.
Note: the kevent code is not at all optimized and still uses
RARRAY_PTR, so it likely sucks under rbx and MRI 2.1.
Eric Wong (13):
test_epoll: minor compatibility fix for Ruby 2.1.0
avoid RARRAY_PTR usage for Linux-only bits
init: avoid redefinition warning for _GNU_SOURCE
Rakefile: kill raa_update task
util: minor cleanup to favor rb_io_get_io
tests: switch to minitest
test_epoll: switch test_dup_and_fork to exit!
remove all signalfd-related files
tests: remove version-dependent FD_CLOEXEC checks
work around lack of rb_io_get_io in Rubinius
value2timespec: use StringValueCStr for correctness
refactor and fix leak from thread-local storage use
extconf: avoid unnecessary linkage against libkqueue
Lin Jen-Shin (1):
Support for broken system without clock_gettime.
|
|
The check for libkqueue may succeed out-of-the-box on Debian systems
where libkqueue-dev is installed. However, libkqueue-dev on Debian
installs sys/event.h in a non-standard include path
(/usr/include/kqueue), so it is not picked up by default and
kqueue support is never compiled.
So only check for (and link to) libkqueue if we are configured
to detect sys/event.h. This should not affect users on *BSD
platforms with native kqueue support.
|