Date | Commit message (Collapse) |
|
unicorn lost the hijack_setup method in version 5,
so we must recreate it ourselves.
|
|
Unicorn 5 removes some constants we were using, and constant
lookups + inline caching are waste of time anyways on newer
Rubies with the opt_str_freeze bytecode instruction.
This may reduce performance for folks on older Rubies (probably
not noticeable); but improves performance for folks on newer
Rubies.
|
|
This prevents pathological starvation cases where the user-space
ready-list can be repopulated infinitely. With EPOLLONESHOT,
epoll itself may be used for this task (at a slightly higher
cost) by enabling read/write checks, as the epoll ready-list
preserves event ordering when used with EPOLLONESHOT.
|
|
This requires Rack 1.5.x and unicorn 4.6.0 for hijacking
support. Older versions of Rack continue to work fine,
but we must use unicorn 4.6.0 features to support this.
|
|
on_read normally relies on the close checking in on_readable,
but on_deferred_write_complete may be called from on_writable
instead (bypassing the close check of on_readable).
This affects both Epoll and XEpoll users, but only if they
were sending responses via body#to_path and triggering
on_deferred_write_complete.
While we're at it, favor non-recursive want_more instead of
calling on_readable recursively in ev_write_responses to
prevent stack growth.
|
|
Triggering Errno::EBADF is tricky in multithreaded situations
due to possible race conditions and yet-to-be discovered bugs.
shutdown(2) is also safe against apps the fork() internally but
do not execve(2) nor set FD_CLOEXEC.
n.b. calling fork() after pthreads are spawned may not be safe
on all platforms w.r.t. malloc, but /is/ the case for glibc on
GNU/Linux.
|
|
Some pipe responses can trigger the on_deferred_write_complete
method without ever re-running the event loop.
This appears to be the result of the occasional t0050 failures.
|
|
In concurrency models long keepalive times are cheap (and thus
more likely to be used), this allows Rainbows! to gracefully
shut down more quickly.
|
|
There's less logic in the server this way and easier
to potentially share code this way.
|
|
There's actually no reason we can't have these methods
in Rainbows::Configurator where it's easier to document
nowadays.
|
|
Fixed in kgio 2.4.0 now
This reverts commit a1168e7d2bfe182896f139d051ef099616fd1646.
|
|
We're changing our default to 1K buffers to save memory. This
should reduce memory usage of idle clients and lower pressure on
the MRI GC. Rails applications using session cookies (the
default) may want to up this to 2K or more.
|
|
|
|
Run under 1.9.3dev
|
|
IO#trysendfile does not raise exceptions for common EAGAIN
errors, making it far less expensive to use with the following
concurrency models:
* Coolio
* CoolioFiberSpawn
* Revactor
* FiberSpawn
* FiberPool
This requires the new sendfile 1.1.0 RubyGem and removes support
for the sendfile 1.0.0. All sendfile users must upgrade or be
left without sendfile(2) support. IO#sendfile behaves the same
if you're using a multi-threaded concurrency option, but we
don't detect nor use it unless IO#trysendfile exists.
|
|
Don't need to document things that aren't ready, yet.
|
|
acceptor thread pools could use some work, still
|
|
There's a lot of code duplication here :<
|
|
We want to use the singleton methods in Kgio to reduce
conditionals.
|
|
We can't work around it effectively in the C extension
itself. This requires the latest sleepy_penguin gem.
|
|
We should only attempt to modify the descriptor when we
block, and not for subsequent events.
|
|
We're living on the EDGE and mixing epoll with threads :D
|
|
We know @wr_queue is empty since we just initialized it
and the first thing an HTTP client does is read.
|
|
No need to setting an ivar for most requests
|
|
We'll override it, maybe...
|
|
We don't do Level-Triggered I/O around here
|
|
We'll lower our precision for keepalive timeouts a little
and and reduce our Time object allocation rate.
|
|
We don't need to allocate new string objects for short-lived
strings. We'll pay the price of a constant lookup instead.
|
|
We can eliminate the State module to simplify our code
since 1.3.x keeps better track of things.
|
|
It was based off the nginx window of 64 events. Not that
any servers are really that busy...
|
|
Nothing we can do about that from clients. Perhaps kgio
should just return nil for those...
|
|
Coolio and EventMachine only use level-triggered epoll,
but being Rainbows!, we live on the EDGE!
|