about summary refs log tree commit homepage
DateCommit message (Collapse)
2020-02-01sleepy_penguin 3.5.2 HEAD v3.5.2 master
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.
2020-01-29doc: switch bogomips.org to yhbt.net
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.
2019-11-29epoll: suppress warning for rb_ensure(real_epwait,...)
rb_ensure takes VALUE args, not "void *"
2019-11-29test_epoll: avoid out-of-FD errors
GC works unpredictably, so we need to track and close IO objects themselves.
2019-10-31pkg.mk: use dark216 theme for Earth Day 2019
(forgot to commit for a few months)
2019-01-02splice.c: remove reference to non-existent function
There is no "trysplice" method, here. Instead, we rely on the F_NONBLOCK and "exception: false" keyword argument.
2018-12-15sleepy_penguin 3.5.1 v3.5.1
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
2018-12-15doc: use HTTPS URLS when possible
It should give some layer of protection against MITM attacks and snooping.
2018-12-14epoll: avoid reduce block capture and ivar requests
Bytecode golfing...
2018-12-11kqueue: get rid of unused variable warnings
2018-12-11fix 64-to-32-bit truncation warning
4GB thread-local-storage should be enough for anyone, right?
2017-04-15kqueue: modernize Struct usage for Ruby 2.5.0dev
Ruby 2.4 deprecates old macros, and it looks like 2.5.0 will remove RSTRUCT_PTR.
2017-04-14kqueue: ensure close-on-exec flag is set
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.
2017-03-22sleepy_penguin 3.5.0 v3.5.0
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
2017-03-22doc: avoid incorrect links to Epoll::IO
Most of the time, we want the core "IO" class, but rdoc wants to be clever...
2017-03-22doc: tests and examples for changing pipe size in Linux
We will not implement "pipe_size" as an accessor in a core class like the "io_splice" RubyGem did.
2017-03-22copy_file_range: add documentation
The public API should be documented, after all.
2017-03-22build: remove build-time olddoc dependency
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.
2017-03-22sp_copy: remove dummy 1.8 code for non-native threaded Ruby
We don't even support 1.9 in the upcoming release, due to the use of keyword args.
2017-03-22kqueue: remove IO#autoclose= and 1.8-related checks
We only support modern Rubies, so IO#autoclose= is implicit and we should not be wasting bytecode checking for it.
2017-03-18epoll: add EPOLLEXCLUSIVE constant and documentation
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
2017-03-17favor require_relative over require pu
This makes it easier to avoid file name conflicts while also improving startup performance by attempting fewer paths.
2017-03-17epoll: add newline to Kernel#warn messages for atomicity
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.
2017-03-16drop unused Ruby 1.8 support code
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.
2017-03-16allow nestable TLS buffers within the same thread
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.
2017-03-16free buffer if pthread_setspecific fails
Unlikely, but we must not leak memory if pthread_setspecific somehow fails.
2017-03-11tests: switch to test-unit
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.
2017-03-11portability fixes for systems w/o splice, copy_file_range
We need to support FreeBSD, at least.
2017-03-11implement linux_sendfile support
This will also allow non-Linux users to use sendfile if it is not available.
2017-03-02gemspec: use SPDX-compatible license specifier
This makes it easier for automated checkers to check our license.
2017-01-05copy_file_range: move wrapper to Ruby for keyword arg handling
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.
2017-01-04remove PIPE_BUF constant definition
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) }
2017-01-04doc: remove references to IO#pipe_size accessor
This is a part of the "io_splice" RubyGem we will not be supporting in "sleepy_penguin".
2017-01-04new API for splice and tee
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.
2017-01-04copy_file_range: use correct syscall numbers on x86/x86-64
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.
2017-01-04pkg.mk: various updates from other projects
* 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
2017-01-02splice: clarification regarding tee() flags
It's not our fault, it's the kernels :P
2017-01-02unify rb_gc() handling for out-of-FD conditions
This should hopefully simplify logic a bit and avoid expensive access to errno.
2017-01-02doc: various URL updates (https)
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 :)
2016-03-15implement copy_file_range support for Linux 4.5+
Under Linux 4.5, this allows for efficient copies and is similar to the splice and sendfile system calls.
2016-03-15support the splice(2) and tee(2) syscalls
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
2015-12-07note the epoll/io.rb file is only for Ruby 1.8
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.
2015-06-05epoll: allow :CLOEXEC instead of the long constant
The long constant name conveys no additional info. Since epoll_create1 is rarely called, and a cache lookup for cold code is wasfeful
2015-04-22TODO: add memfd item
memfd looks rather reasonable and non-horrible, so maybe we may implement it more easily (unlike fanotify which requires CAP_SYS_ADMIN).
2015-01-11README: fix wording: are => is
2015-01-11sleepy_penguin 3.4.1 - minor updates v3.4.1
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
2015-01-11gemspec: remove dead rdoc_options config
Old wrongdoc cruft, not used in olddoc.
2015-01-11sleepy_penguin 3.4.0 - minor updates v3.4.0
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
2015-01-11gemspec: 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.
2015-01-11README: stop mentioning Rubinius
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.