Date | Commit message (Collapse) |
|
One bugfix for Epoll#delete:
Eric Wong (1):
safer closed checks for proxied objects
|
|
Proxied objects may not be IOs at all, so have type-dependent
checks to ensure they're closed.
|
|
This release introduces compatibility with pre-EPOLLRDHUP
systems.
It also optimizes syscalls away for Epoll#set and Epoll#delete.
Epoll#add, Epoll#mod and Epoll#del should no longer be needed in
most code.
|
|
Shortening URLs to save precious bytes!
|
|
|
|
Makes it easier to share common code between projects
and still use sh/make instead of Ruby :P
|
|
Trying to be DRY, but we're sleepy and drool a lot
|
|
|
|
We won't be spending too much time on 1.8 support
anymore.
|
|
Occasionally users may want a way to check if they
stored an IO object or not, this makes it easier.
|
|
It's slightly faster
|
|
We can have simplify user code by caching flags and using
the GC mark array to avoid syscalls and unnecessary
errors/exceptions.
|
|
We don't want to end up accidentally splitting arrays for
the same epoll file descriptor since they'll be linked.
|
|
Out-dated "enterprise" distros suck :P
|
|
One convenience fix:
epoll: prevent IO objects from getting GC-ed
Users of our code may forget to keep references for their IO
objects at all, and since it's not possible for GC to mark
kernel memory, we just hold on to the IO objects for them.
We can't unmark close()d file descriptors, ever, so we don't
bother with the EPOLL_CTL_DEL case, either. Just storing IO
objects in an array using the raw descriptor as a key will allow
bounded space usage just like the in-kernel FD tables as long
as the user remembers to close descriptors themselves.
|
|
Users of our code may forget to keep references for their IO
objects at all, and since it's not possible for GC to mark
kernel memory, we just hold on to the IO objects for them.
We can't unmark close()d file descriptors, ever, so we don't
bother with the EPOLL_CTL_DEL case, either. Just storing IO
objects in an array using the raw descriptor as a key will allow
bounded space usage just like the in-kernel FD tables as long
as the user remembers to close descriptors themselves.
|
|
SleepyPenguin::Epoll#delete method added for "soft" failures
Documentation updates and cleanups, the website is now
JavaScript-free!
(Ignore the 1.1.0 "release", it was a lie)
|
|
Ugh, release got fat-fingered :<
|
|
SleepyPenguin::Epoll#delete method added for "soft" failures
Documentation updates and cleanups, the website is now
JavaScript-free!
|
|
No need to burden applications.
|
|
Switch documentation over to wrongdoc, no more JavaScript!
Our documentation still sucks.
|
|
|
|
We do not depend on external libraries other than the
system C library
|
|
It seems to make more sense this way... Editors wanted :)
|
|
Should be ready for release
|
|
Some of the GC tests aren't realistic, but if they work in MRI
then we can expect them to work reasonably well everywhere.
|
|
Rubinius 1.1.1 does not include this function
ref: http://github.com/evanphx/rubinius/issues/497
|
|
Tested on Rubinius.
|
|
We shall release without SignalFD support
|
|
This wraps the eventfd(2) interface of Linux. Like TimerFD, it
is not available on older distributions.
|
|
This wraps the timerfd_* interface in the Linux kernel.
It is not available on older distributions.
|
|
This can potentially be very powerful under 1.9
with native threads
|
|
It was just st.h in the old days.
|
|
There can be ways (in the future) where supporting
Epoll#dup/Epoll#clone can proveuseful, so continue to
support them until proven otherwise.
|
|
There are no FD flags besides FD_CLOEXEC, so
there's no point in making an extra fcntl()
call.
|
|
It's dangerous to preserve epoll descriptors across fork,
especially in Ruby where the GC can invalidate objects at any
time. Installing pthread_atfork hooks prevents VALUE references
stored in the kernel from leaking across process boundaries,
making it far more difficult for a sanely written application to
leak invalid VALUEs to the user.
|
|
We don't have to emulate the C API exactly, and it
makes life saner/easier for our users.
|
|
Storing Ruby object values in the kernel means
they won't be visible to the GC, but for the
most part it's safe.
|
|
Just to make sure edge-triggering works on newly
created TCP connections.
|
|
|
|
|
|
|