ChangeLog from bogomips.org/unicorn.git (v1.1.5..v3.5.0)

commit d1c9aa300c0cbda272f197b734b3e895959ae3e3
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Mar 15 12:19:30 2011 +0000

    unicorn 3.5.0 - very minor improvements

    A small set of small changes but it's been more than a month
    since our last release.  There are minor memory usage and
    efficiently improvements (for graceful shutdowns).  MRI 1.8.7
    users on *BSD should be sure they're using the latest patchlevel
    (or upgrade to 1.9.x) because we no longer workaround their
    broken stdio (that's MRI's job :)

commit e6b6782030d8593006b4b7cace866cf42dd38d51
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Mar 8 06:59:53 2011 +0000

    gemspec: update kgio dependency to 2.3.2

    People reinstalling would've pulled it in anyways, but
    2.3.2 is the latest and has no known issues.

commit 1594937132a5d9b7f1dc24cc47e3a27679ac9950
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Mar 8 06:59:08 2011 +0000

    gemspec: no need for require_paths

commit cc7e65a1aa1bacc9658a687140011e999be6e3e7
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Feb 25 17:54:24 2011 +0000

    tee_input: remove old *BSD stdio workaround

    Ruby 1.8.* users should get the latest Ruby 1.8.7 anyways since
    they contain critical bugfixes.  We don't keep workarounds
    forever since the root problem is fixed/worked-around in
    upstream and people have had more than a year to upgrade Ruby.

commit 2b6dd7653211d3d6b4cb6a46eec11bbde8cab789
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Feb 18 17:02:08 2011 -0800

    clear listeners array on SIGQUIT

    We don't want to repeatedly reclose the same IOs
    and keep raising exceptions this way.

commit d3ebd339990b0586a5993232302235c26cdb33d9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Feb 16 10:33:20 2011 -0800

    README: clarify the versions of "Ruby license"

    Ruby 1.9.3dev is now using the 2-clause BSD License, not the
    GPLv2.  Do not mislead people into thinking we will switch to
    any BSD License, we won't.

commit 4cfb64f10784498b9625bbbd3364231710bc7c36
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Feb 10 13:41:32 2011 -0800

    Revert "test_helper: simplify random port binding"

    This causes conflicts with ports clients may use in
    the ephemeral range since those do not hold FS locks.

    This reverts commit e597e594ad88dc02d70f7d3521d0d3bdc23739bb.

    Conflicts:

     test/test_helper.rb

commit 6dd90cb902f43b32b0db204484d5e3df79ec0d0c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Feb 10 13:34:58 2011 -0800

    remove unnecessary &block usage

    They needlessly allocate Proc objects

commit 1fd1234ca5ba3d84d2182c38b37322bd55f08882
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Feb 7 16:09:53 2011 -0800

    test_helper: avoid FD leakage/waste

    No need to unnecessarily leave file descriptor open.

commit 6ffc294aac4735127ac9455266623aaa3603e9c1
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Feb 4 13:06:30 2011 -0800

    unicorn 3.4.0 - for people with very big LANs

    * IPv6 support in the HTTP hostname parser and configuration
      language.  Configurator syntax for "listen" addresses should
      be the same as nginx.  Even though we support IPv6, we will
      never support non-LAN/localhost clients connecting to Unicorn.

    * TCP_NOPUSH/TCP_CORK is enabled by default to optimize
      for bandwidth usage and avoid unnecessary wakeups in nginx.

    * Updated KNOWN_ISSUES document for bugs in recent Ruby 1.8.7
      (RNG needs reset after fork) and nginx+sendfile()+FreeBSD 8.

    * examples/nginx.conf updated for modern stable versions of nginx.

    * "Status" in headers no longer ignored in the response,
      Rack::Lint already enforces this so we don't duplicate
      the work.

    * All tests pass under Ruby 1.9.3dev

    * various bugfixes in the (mostly unused) ExecCGI class that
      powers http://bogomips.org/unicorn.git

commit 3df8a197320b8a9e8a6413dcd04613db0558d90a
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Feb 4 13:04:39 2011 -0800

    bump dependency on kgio

    This is needed for IPv6 support, and 2.2.0 is nicer
    all around for Rainbows! users.  Updates wrongdoc
    while we're at it, too.

commit 1045faa0f9e94b13ee0281b7968b72d6f50dd5bf
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Feb 3 13:53:18 2011 -0800

    test/unit: fix tests under Ruby 1.9.3dev

    Ugh, one day I'll clean them up, one day...

commit 9e7a8114fb0fcc56b475d17f158eaa5b7f1f7bdd
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Feb 2 17:37:22 2011 -0800

    Fix Ruby 1.9.3dev warnings

    for i in `git ls-files '*.rb'`; do ruby -w -c $i; done

commit e597e594ad88dc02d70f7d3521d0d3bdc23739bb
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Feb 2 16:54:07 2011 -0800

    test_helper: simplify random port binding

    Duh...

commit 314680327b95c0dc5e11be45a6343ca2a18ee447
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Feb 2 16:27:30 2011 -0800

    socket_helper: cleanup leftover debugging statement

    Oops!  Ugh, not my day...

commit e0160a18ef5c4592d1ac5ff24ba8ae0fd703057c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Feb 2 15:34:33 2011 -0800

    socket_helper: export tcp_name as a module_function

    Oops!

commit 87fd86ef22b6b80fa75dd8e50f53a4e62e8339f7
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Feb 2 15:22:02 2011 -0800

    allow binding on IPv6 sockets with listen "[#{addr}]:#{port}"

    This is much like how nginx does it, except we always require a
    port when explicitly binding to IPv6 using the "listen"
    directive.  This also adds support to listen with an
    address-only, which can be useful to Rainbows! users.

commit d140e7b1ff44b06bc54c2b790d06e9c7325503fe
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Feb 2 14:45:57 2011 -0800

    http: parser handles IPv6 bracketed IP hostnames

    Just in case we have people that don't use DNS, we can support
    folks who enter ugly IPv6 addresses...

    IPv6 uses brackets around the address to avoid confusing
    the colons used in the address with the colon used to denote
    the TCP port number in URIs.

commit 24f8ef5f385e38954a5582fb2e8cd9d12fbf7d20
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Jan 31 16:14:46 2011 -0800

    force socket options to defaults if unspecified

    This reduces surprise when people (correctly) believe
    removing an option from the config file will return
    things back to our internal defaults.

commit c28e2610cfc70e89a0ffabe18356d148afe98bfc
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Jan 31 15:51:30 2011 -0800

    enable TCP_NOPUSH/TCP_CORK by default

    It's actually harmless since Unicorn only supports "fast"
    applications that do not trickle, and we don't do keepalive so
    we'll always flush-on-close.  This should reduce wakeups on the
    nginx proxy server if nginx is over TCP.  Mongrel 1.x had
    TCP_CORK enabled by default, too.

commit e3420e0ae1f3c38f125010134d2cdeb22c6fa64e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Jan 31 15:50:37 2011 -0800

    test_upload: check size in server

    The client may not get a proper response with TCP_CORK enabled

commit f4caf6b6bdea902abaadd3c04b2af94f056c4ff1
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jan 28 18:11:26 2011 +0000

    KNOWN_ISSUES: document broken RNG+fork in newer Ruby 1.8

    Reported by: ghazel@gmail.com

    ref: <AANLkTimTpPATTpkoD2EYA2eM1+5OzCN=WxnCygQmJdhn@mail.gmail.com>

commit 09afcf2ce9fc89d77b6b282bbf00a78c73741a4b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jan 25 13:58:29 2011 -0800

    examples/nginx.conf: use try_files directive

    This feature is in nginx 0.7.x and 0.8.x and optimized
    better than the "if" directive in nginx.conf

    ref: http://wiki.nginx.org/Pitfalls
    ref: http://wiki.nginx.org/IfIsEvil

commit 1ca83b055375ab7e72d383ffd0f36f70c07d9e92
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jan 25 13:56:39 2011 -0800

    examples/nginx: avoid unnecessary listen directive

    There's no need to use listen unless you use non-default port or
    can enable "deferred" or "httpready" (which you usually want).

commit fb1f33aecc7102fb5c10e27c65b9b27cf249415f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jan 25 13:42:53 2011 -0800

    KNOWN_ISSUES: split old stuff into its own section

    Ruby 1.9.1, Sinatra 0.3.x, and Rails 2.3.2 are not in
    common use anymore (at least we don't think).

commit 8ac0ae45a04f5f121f323c182403ef6eb0d8aa18
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jan 25 13:30:21 2011 -0800

    KNOWN_ISSUES: FreeBSD 8 and sendfile can be buggy

    Reported by Alexey Bondar.

commit d770d09dfd9e5d7148379c58cdf9a020cbdc63b6
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jan 21 12:28:39 2011 -0800

    git.bogomips.org => bogomips.org

    bogomips.org is slimming down and losing URL weight :)

commit 6cca8e61c66c1c2a8ebe260813fa83e44530a768
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jan 21 04:01:01 2011 +0000

    exec_cgi: handle Status header in CGI response

    We no longer blindly return 200 if the CGI returned another error
    code.  We also don't want two Status headers in our output since we
    no longer filter it out.

commit c4d77de381c40cf315e6f84791e3fb634bc10675
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jan 21 04:01:02 2011 +0000

    exec_cgi: make output compatible with IO.copy_stream

    Rainbows! can then use this to bypass luserspace given
    the correct offset is set before hand and the file
    is unlinked.

commit 4150a398a48b9bca96aa623380161229ac0f8622
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Jan 19 19:10:25 2011 -0800

    configurator: undocument trust_x_forwarded_for

    This may not be supported in the future...

commit ec400a537a0947796e108f3593721289661b49dc
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jan 7 10:14:46 2011 -0800

    http_response: do not skip Status header set by app

    Rack::Lint already stops apps from using it.  If a developer
    insists on it, then users who inspect their HTTP headers can
    point and laugh at them for not using Rack::Lint!

commit 5ebd22a9d28fc96c69c09b695d99c1f173ce5a67
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jan 6 15:46:56 2011 -0800

    unicorn 3.3.1 - one minor, esoteric bugfix

    We now close the client socket after closing the response body.
    This does not affect most applications that run under Unicorn,
    in fact, it may not affect any.

    There is also a new v1.1.6 release for users who do not use
    kgio.

commit b72a86f66c722d56a6d77ed1d2779ace6ad103ed
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Jan 5 22:39:03 2011 -0800

    close client socket after closing response body

    Response bodies may capture the block passed to each
    and save it for body.close, so don't close the socket
    before we have a chance to call body.close

commit 1b69686fd28347eb5c071a9b76e2939bca424f04
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Jan 5 15:26:17 2011 -0800

    unicorn 3.3.0 - minor optimizations

    Certain applications that already serve hundreds/thousands of requests a
    second should experience performance improvements due to
    Time.now.httpdate usage being removed and reimplemented in C.

    There are also minor internal changes and cleanups for Rainbows!

commit 62c844e343978f233e4f2567fb344411c39e263c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Jan 5 14:06:00 2011 -0800

    http_parser: add clear method, deprecate reset

    But allows small optimizations to be made to avoid
    constant/instance variable lookups later :)

commit bd397ee11b60243ef15c5558c4309e46e27e6192
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Jan 5 11:41:36 2011 -0800

    http_response: simplify the status == 100 comparison

    No need to preserve the response tuplet if we're just
    going to unpack it eventually.

commit 062227e00f7ec589c3906a8bcd22dd7194268266
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Jan 5 11:32:44 2011 -0800

    http_server: remove unnecessary 'nil'

commit 3f5abce2b1c071f9aed4cdd0951331d7f037c4b1
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Jan 5 11:16:21 2011 -0800

    socket_helper: expose more defaults in DEFAULTS hash

    This will allow Rainbows! to set :tcp_nodelay=>true
    and possibly other things in the future.

commit d100025759450dd1cbeccd1a3e44c46921bba26b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jan 4 17:50:51 2011 -0800

    http_response: implement httpdate in C

    This can return a static string and be significantly
    faster as it reduces object allocations and Ruby method
    calls for the fastest websites that serve thousands of
    requests a second.

    It assumes the Ruby runtime is single-threaded, but that
    is the case of Ruby 1.8 and 1.9 and also what Unicorn
    is all about.  This change is safe for Rainbows! under 1.8
    and 1.9.

commit 6183611108c571dbed29dfe2854b9f06757fd27f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Dec 30 02:32:41 2010 +0000

    http_response: do not account for $, being set

    It's a minor garbage reduction, but nobody uses "$,", and
    if they did, they'd break things in the Ruby standard library
    as well as Rack, so let anybody who uses "$," shoot themselves
    in the foot.

commit 3a2634f3f68f6b8ea1aa7b2bb5944884bbfa8017
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Dec 30 02:30:19 2010 +0000

    tests: test parser works with keepalive_requests=0

    We use this in Rainbows! to disable keepalive in certain
    configurations.

commit 2c57f59172c45a3ca52dbddfb3f12c1bc70cbfd6
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Dec 29 16:45:13 2010 +0000

    http: remove unnecessary dir_config statement

    We do not link against any external libraries

commit 2eb2c74aeb0da1d3f6f575ff8e05715e8c5ed85e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 08:10:35 2010 +0000

    Rakefile: fix fm_update task

    Oops!

commit 6f7a3958c1544c1034ecf8b1ccfdd9dabd171fd2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 08:03:23 2010 +0000

    unicorn 3.2.1 - parser improvements for Rainbows!

    There are numerous improvements in the HTTP parser for
    Rainbows!, none of which affect Unicorn-only users.

    The kgio dependency is incremented to 2.1: this should avoid
    ENOSYS errors for folks building binaries on newer Linux
    kernels and then deploying to older ones.

    There are also minor documentation improvements, the website
    is now JavaScript-free!

    (Ignore the 3.2.0 release, I fat-fingered some packaging things)

commit dece59f577d04f3735ccbeb190d26ce2c371d5f9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 07:58:38 2010 +0000

    gemspec: fix gemspec build

    Oops

commit 03a43d9dc23c21f1c1a1baa2f29eab1157f4a076
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 07:44:54 2010 +0000

    unicorn 3.2.0 - parser improvements for Rainbows!

    There are numerous improvements in the HTTP parser for
    Rainbows!, none of which affect Unicorn-only users.

    The kgio dependency is incremented to 2.1: this should avoid
    ENOSYS errors for folks building binaries on newer Linux
    kernels and then deploying to older ones.

    There are also minor documentation improvements, the website
    is now JavaScript-free!

commit 51f30bf454e82f33443fe4a7f2e0496103c5ec6f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 07:29:38 2010 +0000

    http_server: remove needless lambda

    We can just use a begin block at startup, this also makes life
    easier on RDoc.

commit 45f0220ab13ec67150b3226a83437356f141eefd
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 07:21:34 2010 +0000

    http_response: remove TODO item

    An unconfigured Rainbows! (e.g. Rainbows! { use :Base }) already
    does keepalive and supports only a single client per-process.

commit 87b1cf4eef3d717d345d730f28ddaad319f2fb2f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 06:23:28 2010 +0000

    http: #keepalive? and #headers? work after #next?

    We need to preserve our internal flags and only clear them on
    HttpParser#parse.  This allows the async concurrency models in
    Rainbows! to work properly.

commit c348223a045abb295b8c9d7dbf189264bc3a17c3
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 26 03:38:13 2010 +0000

    bump kgio dependency to ~> 2.1

    The kgio 2.x series will maintain API compatibility
    until 3.x, so it's safe to use any 2.x release.

commit f970d87f9c0a4479a59685920a96c4d2fb2315e1
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Dec 25 19:30:12 2010 +0000

    http: fix typo in xftrust unit test

    Oops

commit f62ef19a4aa3d3e4ce1aa37a499907ff776a8964
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Dec 24 08:37:22 2010 +0000

    doc: use wrongdoc for documentation

    wrongdoc factors out a bunch of common code from this
    project into its own and removes JavaScript from RDoc
    to boot.

commit 210e5cc3109af248d29f1d722076ff8ecd1fde2d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Dec 23 18:10:00 2010 +0000

    TODO: remove item for TeeInput performance

    Disabling TeeInput is possible now, so the filesystem
    is no longer a bottleneck :>

commit 5ffaf7df44425766a60d632881a2debd83605b52
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Dec 21 04:45:30 2010 +0000

    rdoc: include tag subject in NEWS file

    It's more useful this way

commit 3a67490b10ca38d7d3d30c6917d75ce0e093706b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Dec 21 01:58:32 2010 +0000

    rdoc: enable webcvs feature for cgit links

    Hopefully this gets more people reading our source.

commit ee29a14cb383839cf5dcef6fe442558f46a1615b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Dec 21 01:30:35 2010 +0000

    configurator: RDoc cleanups and improvements

    This is the most important part of Unicorn documentation
    for end users.

commit 1f5bac15cd8e4393c6da98eb7bb4532133dc6259
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Dec 21 01:28:23 2010 +0000

    http: hook up "trust_x_forwarded" to configurator

    More config bloat, sadly this is necessary for Rainbows! :<

commit bf64b9aa855cf3590a4d5b4eca853aef33ba90cc
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Dec 20 22:05:50 2010 +0000

    http: allow ignoring X-Forwarded-* for url_scheme

    Evil clients may be exposed to the Unicorn parser via
    Rainbows!, so we'll allow people to turn off blindly
    trusting certain X-Forwarded* headers for "rack.url_scheme"
    and rely on middleware to handle it.

commit 8be3668c11cf721960581e325b481c105e8f3c89
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Dec 20 20:49:21 2010 +0000

    http: refactor finalize_header function

    rack.url_scheme handling and SERVER_{NAME,PORT} handling
    each deserve their own functions.

commit b740269f121167c4f93e3a0e155e05422f6e80ff
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Dec 20 19:40:57 2010 +0000

    http: update setting of "https" for rack.url_scheme

    The first value of X-Forwarded-Proto in rack.url_scheme should
    be used as it can be chained.  This header can be set multiple
    times via different proxies in the chain, but consider the first
    one to be valid.

    Additionally, respect X-Forwarded-SSL as it may be passed with
    the "on" flag instead of X-Forwarded-Proto.

    ref: rack commit 85ca454e6143a3081d90e4546ccad602a4c3ad2e
         and 35bb5ba6746b5d346de9202c004cc926039650c7

commit 7ad59e0c48e12febae2a2fe86b76116c05977c6f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Dec 20 00:14:52 2010 +0000

    http: support keepalive_requests directive

    This limits the number of keepalive requests of a single
    connection to prevent a single client from monopolizing server
    resources.  On multi-process servers (e.g. Rainbows!) with many
    keepalive clients per worker process, this can force a client to
    reconnect and increase its chances of being accepted on a
    less-busy worker process.

    This directive is named after the nginx directive which
    is identical in function.

commit 82ea9b442a9edaae6dc3b06a5c61035b2c2924c9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Dec 19 18:47:23 2010 +0000

    http: delay clearing env on HttpParser#next?

    This allows apps/middlewares on Rainbows! that rely on env in
    the response_body#close to hold onto the env.

commit 39f264173717287eda70910e7a24fbafd21a4a7e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Dec 10 05:45:14 2010 +0800

    unicorn 3.1.0 - client_buffer_body_size tuning

    This release enables tuning the client_buffer_body_size to raise
    or lower the threshold for buffering request bodies to disk.
    This only applies to users who have not disabled rewindable
    input.  There is also a TeeInput bugfix for uncommon usage
    patterns and Configurator examples in the FAQ should be fixed

commit 71716672752e573ff15002aaefd6e8ba8c6b6cb6
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Dec 9 03:39:03 2010 +0000

    allow client_buffer_body_size to be tuned

    Since modern machines have more memory these days and
    clients are sending more data, avoiding potentially slow
    filesystem operations for larger uploads can be useful
    for some applications.

commit 9d80b009a3cb795530ad23263f4eb525880e79dc
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Dec 8 23:53:25 2010 +0000

    configurator: ensure examples in FAQ still work

    This has been broken since 2.0.x
    Internal cleanups sometimes have unintended consequences :<

commit 3b2fc62dadd3c90038c168849b33c4ca6df058da
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Dec 8 22:02:45 2010 +0000

    tee_input: fix accounting error on corked requests

    In case a request sends the header and buffer as one packet,
    TeeInput relying on accounting info from StreamInput is harmful
    as StreamInput will buffer in memory outside of TeeInput's
    control.

    This bug is triggered by calling env["rack.input"].size or
    env["rack.input"].rewind before to read.

commit 52f55529293e466a77090691d1fe06a7933c74a1
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Dec 3 00:31:15 2010 +0000

    unicorn 3.0.1 - one bugfix for Rainbows!

    ...and only Rainbows!  This release fixes HTTP pipelining for
    requests with bodies for users of synchronous Rainbows!
    concurrency models.

    Since Unicorn itself does not support keepalive nor pipelining,
    Unicorn-only users need not upgrade.

commit c32488dcc69181d2e10b82645ef87c8b8b88b8e1
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Dec 2 05:30:39 2010 +0000

    stream_input: avoid trailer parsing on unchunked requests

    It screws up keepalive for Rainbows! requests with a body.

commit dee9e6432c8eb5269a19c4c6b66ab932fdeda34f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Nov 20 10:14:19 2010 +0800

    unicorn 3.0.0 - disable rewindable input!

    Rewindable "rack.input" may be disabled via the
    "rewindable_input false" directive in the configuration file.
    This will violate Rack::Lint for Rack 1.x applications, but can
    reduce I/O for applications that do not need a rewindable
    input.

    This release updates us to the Kgio 2.x series which should play
    more nicely with other libraries and applications.  There are
    also internal cleanups and improvements for future versions of
    Rainbows!

    The Unicorn 3.x series supercedes the 2.x series
    while the 1.x series will remain supported indefinitely.

commit ad268cea66c2b91538dd60fc7f945348bb24214d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Nov 20 08:07:12 2010 +0800

    tests: stream_input tests for mixed gets/read calls

    Some apps may do them, so make sure we do them correctly.

commit cd315e5a20b17d29679fb22b4e2ab44cd6d0edeb
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Nov 20 07:45:57 2010 +0800

    stream_input: use String#sub! instead of gsub!

    There's no difference because of the \A anchor, but sub!
    is doesn't loop so it's simpler.

commit 5bc239fd154a7eaebeb024394f8e0b507bbf4c5a
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Nov 19 20:51:57 2010 +0000

    stream_input: small cleanups and fixes

    No need to accept any number of args, that could hide bugs in
    applications that could give three or more arguments.  We also
    raise ArgumentError when given a negative length argument to
    read.

commit d12e10ea88c7adeb97094e4b835201e4c2ce52ab
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Nov 19 01:55:07 2010 +0000

    tests: isolate kgio 2.0.0 instead of the prerelease

    Same thing, but might as well make it more obvious.

commit 507f228864574437e610e57d20d3b77c1e6d0e41
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Nov 19 08:04:14 2010 +0800

    unicorn 3.0.0pre2 - less bad than 2.x or 3.0.0pre1!

    This release updates us to the Kgio 2.x series which should play
    more nicely with other applications.  There are also bugfixes
    from the 2.0.1 release and a small bugfix to the new StreamInput
    class.

    The Unicorn 3.x series will supercede the 2.x series
    while the 1.x series will remain supported indefinitely.

commit 238c98ec4c353bb14671ab543c21baa068b7e3f2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Nov 19 08:02:45 2010 +0800

    update to kgio 2.x series

    The Kgio 2.x API is less brain-damaged than the 1.3.x series
    was, and should solve API-compatibility problems with
    dalli 0.11.1.

commit 86d2a22ffdc4bf9f16e1870f9db9a2ff84760c7c
Merge: eda4086 268c2ec
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 18 07:48:12 2010 +0800

    Merge branch '2.0.x-stable'

    * 2.0.x-stable:
      unicorn 2.0.1 - fix errors in error handling
      tests: add parser error test from Rainbows!
      http_server: fix HttpParserError constant resolution
      t0012: fix race condition in reload

commit 268c2ec5fef2630b0626b848be9d6ec46d360ddb
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 18 07:42:40 2010 +0800

    unicorn 2.0.1 - fix errors in error handling

    This release fixes errors in our own error handling,
    causing certain errors to not be logged nor responded
    to correctly.

    Eric Wong (3):
          t0012: fix race condition in reload
          http_server: fix HttpParserError constant resolution
          tests: add parser error test from Rainbows!

commit 859593b418db7e5fd93295a7a8b15de56cc4f6dd
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 18 07:44:47 2010 +0800

    tests: add parser error test from Rainbows!

    This will help ensure we trap our own errors properly
    in the future.
    (cherry picked from commit eda408603edc51f10f17217c767b31a45eb6c627)

commit eda408603edc51f10f17217c767b31a45eb6c627
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 18 07:44:47 2010 +0800

    tests: add parser error test from Rainbows!

    This will help ensure we trap our own errors properly
    in the future.

commit 3362dc51934c15fd944748e55ba4a470cc60d27d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 18 07:36:27 2010 +0800

    stream_input: read with zero length returns ''

    Any calls to read with an explicit zero length now returns an
    empty string.  While not explicitly specified by Rack::Lint,
    this is for compatibility with StringIO and IO methods which
    are common in other web servers.

commit a6d96b61c2d81af077d55f43121c8472aa095447
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Nov 17 11:20:02 2010 -0800

    http_server: fix HttpParserError constant resolution

    "Unicorn" is no longer in the default constant resolution
    namespace.
    (cherry picked from commit 390e351dd1283d4c80a12b744b1327fff091a141)

commit 390e351dd1283d4c80a12b744b1327fff091a141
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Nov 17 11:20:02 2010 -0800

    http_server: fix HttpParserError constant resolution

    "Unicorn" is no longer in the default constant resolution
    namespace.

commit 01ae51fa5fda40a63277b0d1189925fb209c75a9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 18 02:48:41 2010 +0800

    add missing test files

    oops :x

commit 958c1f81a2c570f4027d8fe2dd4f5c40ac7ed430
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Nov 16 16:00:07 2010 -0800

    unicorn 3.0.0pre1

    Rewindable "rack.input" may be disabled via the
    "rewindable_input false" directive in the configuration file.
    This will violate Rack::Lint for Rack 1.x applications, but
    can reduce I/O for applications that do not need it.

    There are also internal cleanups and enhancements for future
    versions of Rainbows!

    Eric Wong (11):
          t0012: fix race condition in reload
          enable HTTP keepalive support for all methods
          http_parser: add HttpParser#next? method
          tee_input: switch to simpler API for parsing trailers
          switch versions to 3.0.0pre
          add stream_input class and build tee_input on it
          configurator: enable "rewindable_input" directive
          http_parser: ensure keepalive is disabled when reset
          *_input: make life easier for subclasses/modules
          tee_input: restore read position after #size
          preread_input: no-op for non-rewindable "rack.input"

commit 431de671a29b312bd19e615bd4bd99228b0c8b13
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Nov 16 13:51:24 2010 -0800

    preread_input: no-op for non-rewindable "rack.input"

    We may get "rack.input" objects that are not rewindable
    in the future, so be prepared for those and do no harm.

commit d41e5364bde413e195df8803845f7232718325a6
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 28 09:03:21 2010 +0000

    t0012: fix race condition in reload

    We need to ensure the old worker is reaped before sending
    new requests intended for the new worker.
    (cherry picked from commit b45bf946545496cf8d69037113533d7a58ce7e20)

commit 17a734a9f6ccea8c969a574f09b5d8dd3d568a9c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Nov 13 16:41:10 2010 +0800

    tee_input: restore read position after #size

    It's possible for an application to call size after it has read
    a few bytes/lines, so do not screw up a user's read offset when
    consuming input.

commit 855c02a9720a17854a2f1c715efbe502cdba54e2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Nov 12 10:59:14 2010 +0800

    *_input: make life easier for subclasses/modules

    Avoid having specific knowledge of internals in TeeInput
    and instead move that to StreamInput when dealing with
    byte counts.  This makes things easier for Rainbows! which
    will need to extends these classes.

commit 3b544fb2c0e4a1e14a7bcb752a8af9819b5aaeb2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 11 07:31:01 2010 +0800

    http_parser: ensure keepalive is disabled when reset

    We'll need this in Rainbows!

commit a89ccf321224f3248ddd00bb0edb320311604e4e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 11 02:16:50 2010 +0800

    configurator: enable "rewindable_input" directive

    This allows users to override the current Rack spec and disable
    the rewindable input requirement.  This can allow applications
    to use less I/O to minimize the performance impact when
    processing uploads.

commit 7d44b5384758aeddcb49d7606a9908308df7c698
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 11 01:13:12 2010 +0800

    add stream_input class and build tee_input on it

    We will eventually expose a Unicorn::StreamInput object as
    "rack.input" for Rack 2.x applications.  StreamInput allows
    applications to avoid buffering input to disk, removing the
    (potentially expensive) rewindability requirement of Rack 1.x.

    TeeInput is also rewritten to build off StreamInput for
    simplicity.  The only regression is that TeeInput#rewind forces
    us to consume an unconsumed stream before returning, a
    negligible price to pay for decreased complexity.

commit 1493af7cc23afecc8592ce44f5226476afccd212
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Nov 11 07:17:19 2010 +0800

    switch versions to 3.0.0pre

    Here are major, incompatible internal API changes.

commit 8edcc3f9e1be9113685e61b9a83994a02d37c768
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Nov 7 10:21:43 2010 +0800

    tee_input: switch to simpler API for parsing trailers

    Not that anybody uses trailers extensively, but it's
    good to know it's there.

commit 60a9ec94f1f738f881e67f0a881c44c104f07c04
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Nov 6 10:30:44 2010 +0800

    http_parser: add HttpParser#next? method

    An easy combination of the existing HttpParser#keepalive? and
    HttpParser#reset methods, this makes it easier to implement
    persistence.

commit 7987e1a4001491f8a494f3926037f8cbee713263
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Sep 3 01:48:24 2010 +0000

    enable HTTP keepalive support for all methods

    Yes, this means even POST/PUT bodies may be kept alive,
    but only if the body (and trailers) are fully-consumed.

commit b45bf946545496cf8d69037113533d7a58ce7e20
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 28 09:03:21 2010 +0000

    t0012: fix race condition in reload

    We need to ensure the old worker is reaped before sending
    new requests intended for the new worker.

commit 5ffc1f81c3f56d17ff3369f7514e978754840c29
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:32:24 2010 +0000

    unicorn 2.0.0 - mostly internal cleanups

    Despite the version number, this release mostly features
    internal cleanups for future versions of Rainbows!.  User
    visible changes include reductions in CPU wakeups on idle sites
    using high timeouts.

    Barring possible portability issues due to the introduction of
    the kgio library, this release should be ready for all to use.
    However, 1.1.x (and possibly 1.0.x) will continue to be
    maintained.  Unicorn 1.1.5 and 1.0.2 have also been released
    with bugfixes found during development of 2.0.0.

commit a3b08e9411f1d958e2264329c67972541424ac35
Merge: 0692e8c 7f3ebe9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:31:41 2010 +0000

    Merge branch '1.1.x-stable'

    * 1.1.x-stable:
      unicorn 1.1.5
      doc: stop using deprecated rdoc CLI options
      gemspec: depend on Isolate 3.0.0 for dev
      configurator: reloading with unset values restores default
      configurator: use "__send__" instead of "send"
      Rakefile: capture prerelease tags
      Rakefile: don't post freshmeat on empty changelogs
      fix delays in signal handling

commit 0692e8cb10dd27275f2de794ed6eba62e9918431
Merge: 4d493d8 ea975cc
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:31:38 2010 +0000

    Merge branch 'maint'

    * maint:
      unicorn 1.0.2
      doc: stop using deprecated rdoc CLI options
      gemspec: depend on Isolate 3.0.0 for dev
      configurator: reloading with unset values restores default
      configurator: use "__send__" instead of "send"
      Rakefile: capture prerelease tags
      Rakefile: don't post freshmeat on empty changelogs
      fix delays in signal handling
      SIGTTIN works after SIGWINCH

commit 4d493d8ad203d7f13ac56b7d6ba2b3aaa481cbd2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 16:26:28 2010 -0700

    examples/unicorn.conf: add a note about throttling signals

    Sending the same signal faster than the receiver can process
    means signals can get lost.

commit ea975cc3e6d2e6ac9c971c8cbda712486ec63c2a
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:11:09 2010 +0000

    unicorn 1.0.2

    This is the latest maintenance release of the 1.0.x series.
    All users are encouraged to upgrade to 1.1.x stable series
    and report bugs there.

    Shortlog of changes since 1.0.1:

    Eric Wong (8):
          SIGTTIN works after SIGWINCH
          fix delays in signal handling
          Rakefile: don't post freshmeat on empty changelogs
          Rakefile: capture prerelease tags
          configurator: use "__send__" instead of "send"
          configurator: reloading with unset values restores default
          gemspec: depend on Isolate 3.0.0 for dev
          doc: stop using deprecated rdoc CLI options

commit 856959cc0b2dbc96f115d26672d0f5b73ae79914
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:07:42 2010 +0000

    doc: stop using deprecated rdoc CLI options

    -N and -a switches no longer exist in rdoc 2.5
    (cherry picked from commit 054c7df93db61839648925cfd881ae880709a210)

commit 04f0f44f9bd0907fcff1e2cdc59f7e84d4110539
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:08:51 2010 +0000

    gemspec: depend on Isolate 3.0.0 for dev

    No reason to not use the latest and greatest!
    (cherry picked from commit 570a57c07fd8c3d24b7337637e0dd30136b3a11a)

    Conflicts:

     unicorn.gemspec

commit 054c7df93db61839648925cfd881ae880709a210
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:07:42 2010 +0000

    doc: stop using deprecated rdoc CLI options

    -N and -a switches no longer exist in rdoc 2.5

commit 570a57c07fd8c3d24b7337637e0dd30136b3a11a
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 23:06:45 2010 +0000

    gemspec: depend on Isolate 3.0.0 for dev

    No reason to not use the latest and greatest!

commit 2dd4a89d5726e13b962c1e287d84a6c30f5dd46c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 13:51:12 2010 -0700

    configurator: reloading with unset values restores default

    If a configuration directive is set at startup and later
    unset, it correctly restores the original default value
    as if it had never been set in the first place.

    This applies to the majority of the configuration values with
    a few exceptions:

    * This only applies to stderr_path and stdout_path when
      daemonized (the usual case, they'll be redirected to
      "/dev/null").  When NOT daemonized, we cannot easily redirect
      back to the original stdout/stderr destinations.

    * Unsetting working_directory does not restore the
      original working directory where Unicorn was started.
      As far as we can tell unsetting this after setting it is
      rarely desirable and greatly increases the probability of
      user error.
    (cherry picked from commit 51b2b90284000aee8d79b37a5406173c45ae212d)

commit 5e672c48d8a3555e4a01f653fb2e0b3556087737
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 12:46:46 2010 -0700

    configurator: use "__send__" instead of "send"

    It's less ambiguous since this is a network server after all.
    (cherry picked from commit f62c5850d7d17d7b5e301a494f8bdf5be3674411)

commit 51b2b90284000aee8d79b37a5406173c45ae212d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 13:51:12 2010 -0700

    configurator: reloading with unset values restores default

    If a configuration directive is set at startup and later
    unset, it correctly restores the original default value
    as if it had never been set in the first place.

    This applies to the majority of the configuration values with
    a few exceptions:

    * This only applies to stderr_path and stdout_path when
      daemonized (the usual case, they'll be redirected to
      "/dev/null").  When NOT daemonized, we cannot easily redirect
      back to the original stdout/stderr destinations.

    * Unsetting working_directory does not restore the
      original working directory where Unicorn was started.
      As far as we can tell unsetting this after setting it is
      rarely desirable and greatly increases the probability of
      user error.

commit f62c5850d7d17d7b5e301a494f8bdf5be3674411
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 12:46:46 2010 -0700

    configurator: use "__send__" instead of "send"

    It's less ambiguous since this is a network server after all.

commit 928a88d5419210380078a2e141cb64d308719295
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 6 01:27:45 2010 +0000

    Rakefile: capture prerelease tags

    Since we do those, now.
    (cherry picked from commit 1d1a2b1bd5bdd89f774f19bf8ad24c2f5f8a2d4c)

commit 74dec350d93b88c0a5bd792239671097901e2393
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 19:32:55 2010 +0000

    Rakefile: don't post freshmeat on empty changelogs

    We don't want to flood or monopolize freshmeat.
    (cherry picked from commit 1ad510d645e0c84c8d352ac0deaeefa75240ea94)

commit c7feb7e10a937df2dc72f53aa6cc1ebda4c1cd3b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 12:43:14 2010 -0700

    configurator: switch to normal class

    No point in using a Struct for (1.8) space-efficiency
    if there's only one of them.

commit 10037f2aabb3fab4296fc90c615e7caa9f4a9b53
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 01:44:33 2010 +0000

    fix delays in signal handling

    There is no need to loop in the master_sleep method at all, as
    the rest of the code is designed to function even on interrupted
    sleeps.

    This change is included as part of a larger cleanup in master.
    (commit bdc79712e5ac53d39c51e80dfe50aff950e5053f)

commit 514af94321ef0fab74894e517792c4a9709d76f5
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 27 00:36:25 2010 +0000

    reduce master process wakeups

    To reduce CPU wakeups and save power during off hours,
    we can precalculate a safe amount to sleep before killing
    off idle workers.

commit 7ef05ec23b06f06e9d4bb1cf45d1907b4eeacb80
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 26 23:19:09 2010 +0000

    master: remove limit on queued signals

    If a moronic sysadmin is sending too many signals, just let them
    do it.  It's likely something is terribly wrong when the server
    is overloaded with signals, so don't try to protect users from
    it.  This will also help in case where TTOU signals are sent too
    quickly during shutdown, although sleeping between kill(2)
    syscalls is always a good idea because of how non-real-time
    signals are delivered.

commit 2243c97edf80d635871bc678794f07d6c1d033c2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Oct 9 00:03:43 2010 +0000

    unicorn 2.0.0pre3 - more small fixes

    There is a new Unicorn::PrereadInput middleware to which allows
    input bodies to be drained off the socket and buffered to disk
    (or memory) before dispatching the application.

    HTTP Pipelining behavior is fixed for Rainbows!  There
    are some small Kgio fixes and updates for Rainbows!
    users as well.

commit 6eb46e422f4b2ba98c795fca5e18e7262c0c688e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Oct 8 23:44:23 2010 +0000

    add PrereadInput middleware to get around TeeInput

    This may be useful for some apps that wish to drain the body
    before acquiring an app-wide lock.  Maybe it's more useful
    with Rainbows!...

commit 9be78606355d4a0ad4ea59316ab2ce998c5b9a12
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Oct 8 22:58:59 2010 +0000

    bump kgio dependency

    kgio 1.3.1 fixes some cases for zero-length reads.

commit f20274e84169e18a73a5cd341b6bc31b625b83ce
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Oct 8 08:49:22 2010 +0000

    build: automatically call isolate on updates

    Automation is nice, the makefile needs some cleanup

commit 861481436b933bf4b8d647c43191c701651f16e4
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Oct 8 01:34:37 2010 -0700

    bump kgio dependency to 1.3.0

    There was a backwards-incompatible API change,
    but that didn't even affect us.

commit c9950692f44bd91af089794664dc56a446668004
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 7 18:42:15 2010 -0700

    gemspec: bump kgio version

    kgio 1.2.1 works around a bug for some *BSDs, some of which are
    popular platforms for developers.

commit e99178ef89eca9e46b73484aaf9733259dac9dca
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 7 08:12:36 2010 +0000

    http: fix behavior with pipelined requests

    We cannot clear the buffer between requests because
    clients may send multiple requests that get taken in
    one read()/recv() call.

commit eb5ba488422020568e5ccf650891d7fccce7238f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 7 07:22:58 2010 +0000

    unicorn 2.0.0pre2 - releases are cheap

    Internal changes/cleanups for Rainbows!

commit 4c48b520786807487f7f76d709b0dbcee63c4d0c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 7 06:59:05 2010 +0000

    http: remove unnecessary rb_str_update() calls

    Rubinius no longer uses it, and it conflicts with a public
    method in MRI.

commit 8daf254356241c135ad2c843de567910528a10a7
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 7 06:55:22 2010 +0000

    start using more compact parser API

    This should be easier for Rainbows! to use

commit 090f56bb79a8ec734719d9be90daa3cd01d29871
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 7 06:33:03 2010 +0000

    http_server: avoid method redefinition warnings

    We clobber the accessor methods.

commit 5df8f15c32420c03b2e763a649e6d829ede52113
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Oct 7 05:32:38 2010 +0000

    http: allow this to be used as a request object

    The parser and request object become one and the
    same, since the parser lives for the lifetime
    of the request.

commit 629107d749748f661ddb73f146ab35836874cc9e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 6 17:16:49 2010 -0700

    bin/unicorn: show "RACK_ENV" in --help

    It's more descriptive as to what environment we're setting
    than "ENVIRONMENT".

commit 1d1a2b1bd5bdd89f774f19bf8ad24c2f5f8a2d4c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 6 01:27:45 2010 +0000

    Raiefile: capture prerelease tags

    Since we do those, now.

commit cb48b1bc7231db7f53bec6e88e696dc53153750d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 6 01:08:36 2010 +0000

    unicorn 2.0.0pre1 - a boring "major" release

    Mostly internal cleanups for future versions of Rainbows! and
    people trying out Rubinius.  There are tiny performance
    improvements for Ruby 1.9.2 users which may only be noticeable
    with Rainbows!

    Unicorn 1.1.x users are NOT required to upgrade.

commit 4c59a4861bf3f8d25335696c1f8cbce3cd5db902
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Oct 6 01:07:49 2010 +0000

    gemspec: depend on newer isolate

    We use the latest and greatest whenever possible.

commit cb233696be73873f6f8c367f4b977ade1815b265
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 23:59:45 2010 +0000

    various cleanups and reduce indentation

    This also affects some constant scoping rules, but hopefully
    makes things easier to follow.  Accessing ivars (not via
    accessor methods) are also slightly faster, so use them in
    the criticial process_client code path.

commit d4c898a4adc6cb6c3a20a648ae6b9b6a226066a6
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 23:34:39 2010 +0000

    upgrade to kgio 1.2.0

    This provides the kgio_read! method which is like readpartial,
    only significantly cheaper when a client disconnects on us.

commit 80f9987581014d694b8eb67bba0d5c408b7d0f98
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 23:34:19 2010 +0000

    GNUmakefile: fix isolate invocation

    again :x

commit fd6b47cf1690cb45f2144cd92e0fe1f301c7c37b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 22:09:20 2010 +0000

    tee_input: use kgio to avoid stack traces on EOF

    TeeInput methods may be invoked deep in the stack, so
    avoid giving them more work to do if a client disconnects
    due to a bad upload.

commit 350e8fa3a94838bcc936782315b3472615fe6517
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 22:01:19 2010 +0000

    http: raise empty backtrace for HttpParserError

    It's expensive to generate a backtrace and this exception
    is only triggered by bad clients.  So make it harder for
    them to DoS us by sending bad requests.

commit c2975b85b9378797631d3ab133cac371f9fadf54
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 21:38:47 2010 +0000

    tests: do not invoke isolate in test install dest

    We don't want to waste time and bandwidth.

commit ec1315c9e9175d755dfd7b4acb8398fa7c7a924e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 21:29:51 2010 +0000

    test_tee_input: use a socketpair()

    It's a much closer representation of what we'd expect in
    the real server than a mono-directional UNIX pipe.

commit c639eef6b9c8d793c7f72fa5ac03adb5cf4d1e14
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 19:22:09 2010 +0000

    test_signals: enable test under Rubinius

    The bugs from signal handling were fixed in the Rubinius
    1.1.0 release.

commit 72dee9e4a8234af762b058a38132268d202c17bf
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 19:20:39 2010 +0000

    tmpio: use super instead of an explicit method

    This is for compatibility with Ruby implementations such as
    Rubinius that use "IO.new" internally inside "IO.open"

commit 7ca92025ececb4b71ec4420e03d5725f13c39cc4
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 18:48:53 2010 +0000

    update comment about non-blocking accept()

    Thanks to kgio, we no longer use accept_nonblock.

commit fc820598da30509269ec84eeca598085ca296e38
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 08:00:34 2010 +0000

    util: uindent use less ambiguous constant scoping

    This hopefully makes things easier to read and follow.

commit 3d147e9bcd8f99c94900a00181692c2a09c3c3c9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 07:54:13 2010 +0000

    Unicorn::Util.tmpio => Unicorn::TmpIO.new

    This is slightly shorter and hopefully easier to find.

commit e184b9d0fb45b31d80645475e22f0bbbecd195f9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 01:27:00 2010 +0000

    doc: update TODO

    This gives us some things to think about.

commit 29946368c45dce5da116adb426362ee93c507c4e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Oct 5 00:13:02 2010 +0000

    start using kgio, the kinder, gentler I/O library

    This should hopefully make the non-blocking accept()
    situation more tolerable under Ruby 1.9.2.

commit 9ef6b6f551a34922cfd831e2521495e89afe2f94
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Oct 4 23:55:31 2010 +0000

    split out isolate usage/logic

    We'll be using more of Isolate in development.

commit 018a9deff4bd9273e053f369d746256e5b3ac99b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Oct 4 21:06:41 2010 +0000

    http_request: reformat and small reorg

    This hides more HTTP request logic inside our object.

commit dfc5f5a5e4aec4578b79de68c91906da75472a5a
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Sep 29 23:57:57 2010 -0700

    tee_input: update interface to use HttpRequest

    This should ensure we have less typing to do.

commit fe94d80cb37ee441762ad2a8f5c25092f8eb57a8
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Sep 27 22:39:02 2010 -0700

    http_request: avoid globals

    Rainbows! will be able to reuse this.

commit 5b6a97ff54d029d433b79eee1549e6f99464c48b
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Aug 27 21:45:33 2010 +0000

    split out worker to a separate file

    This hopefully makes things easier to read, follow, and find
    since it's mostly documentation...

commit 50c11036dd4898ccfed8b3e0552e88c67b6c63a9
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Aug 27 20:29:55 2010 +0000

    http_response: avoid singleton method

    There's no need for a response class or object since Rack just
    uses an array as the response.  So use a procedural style which
    allows for easier understanding.

    We shall also support keepalive/pipelining in the future, too.

commit 7a3efe8a03f85c1f2957130986c24ef7931ff44a
Merge: 1a2363b 6151686
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Oct 4 20:34:29 2010 +0000

    Merge commit 'v1.1.4'

    * commit 'v1.1.4':
      unicorn 1.1.4 - small bug fix and doc updates
      update Rails 3 tests to use Rails 3 final
      avoid unlinking actively listening sockets
      doc: update HACKING for documentation contributions
      doc: update Sandbox document for Bundler
      TUNING: more on socket buffer sizes

commit 1a2363b17b1d06be6b35d347ebcaed6a0c940200
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Oct 4 04:17:31 2010 +0000

    avoid unlinking actively listening sockets

    While we've always unlinked dead sockets from nuked/leftover
    processes, blindly unlinking them can cause unnecessary failures
    when an active process is already listening on them.  We now
    make a simple connect(2) check to ensure the socket is not in
    use before unlinking it.

    Thanks to Jordan Ritter for the detailed bug report leading to
    this fix.

    ref: http://mid.gmane.org/8D95A44B-A098-43BE-B532-7D74BD957F31@darkridge.com

commit 505a9e72d320fe3ae521ceb0f381c1c0f5ae4389
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Sep 15 14:57:27 2010 -0700

    doc: update HACKING for documentation contributions

    We switched to RDoc 2.5.x long ago and this should clarify
    some documentation preferences I have.

commit 1a75966a5d1a1f6307ed3386e2f91a28bbb72ca0
Author: Eric Wong <normalperson@yhbt.net>
Date:   Wed Sep 15 14:42:54 2010 -0700

    doc: update Sandbox document for Bundler

    Thanks to Lawrence Pit, Jamie Wilkinson, and Eirik Dentz Sinclair.

    ref: mid.gmane.org/4C8986DA.7090603@gmail.com
    ref: mid.gmane.org/5F1A02DB-CBDA-4302-9E26-8050C2D72433@efficiency20.com

commit f9a7a19a361fd674bab4e2df7e0897015528bba7
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Aug 30 23:25:59 2010 -0700

    TUNING: more on socket buffer sizes

    Large buffers can hurt as well as help.  And the difference
    in real apps that do a lot of things other than I/O often
    makes it not worth it.

commit da272fc48ffaa808456fe94dd7a3e01bc9799832
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Aug 30 08:11:44 2010 +0000

    update Rails 3 tests to use Rails 3 final

    Rails 3 is out, and requires no code changes on our end to work
    (as far as our tests show :)

commit 0aaa0afa49a2953b7c26c1596a284621e23d5fc4
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Aug 30 07:59:01 2010 +0000

    remove nasty ugly hacks at startup

    These nasty hacks were breaking Rubinius compatibility.
    This can be further cleaned up, too.

commit f3e1653b900596e054297675becd01d9985ad482
Merge: feab35f d634b06
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Aug 29 23:38:13 2010 +0000

    Merge branch '1.1.x-stable'

    * 1.1.x-stable:
      unicorn 1.1.3 - small bug fixes
      make log reopens even more robust in threaded apps
      update Rails3 tests to use 3.0.0rc2
      make log reopens more robust in multithreaded apps
      bin/*: more consistent --help output
      SIGTTIN works after SIGWINCH

commit feab35fe531843066db3418598874cf9f9419614
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Aug 28 18:52:48 2010 +0000

    make log reopens even more robust in threaded apps

    A follow-up to 4b23693b9082a84433a9e6c1f358b58420176b27

    If multithreaded programming can be compared to juggling
    chainsaws, then multithreaded programming with signal handlers
    in play is akin to juggling chainsaws on a tightrope
    over shark-infested waters.

commit 18968f6aff2fa5ba5a7e3e3d47c9cc05cd6c260d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Aug 28 07:07:14 2010 +0000

    update Rails3 tests to use 3.0.0rc2

    No code changes needed, thankfully.

commit 4b23693b9082a84433a9e6c1f358b58420176b27
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Aug 28 05:30:46 2010 +0000

    make log reopens more robust in multithreaded apps

    IOError may occur due to race conditions as another thread
    may close the file immediately after we call File#closed?
    to check.

    Errno::EBADF may occur in some applications that close a file
    descriptor without notifying Ruby (or if two IO objects refer to
    the same descriptor, possibly one of them using IO#for_fd).

commit 096afc1a8e958cc09b4ce8b3bfe76ce056c7ed69
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Aug 24 06:21:00 2010 +0000

    bin/*: more consistent --help output

    This fixes a long-standing bug in the output of "unicorn_rails"
    where the program name was missing.

commit bdc79712e5ac53d39c51e80dfe50aff950e5053f
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Aug 7 03:27:50 2010 +0000

    miscellaneous loop and begin cleanups

    These are minor changes to remove unnecessary loop nesting and
    begin usage to reduce our code size and hopefully simplify
    flow for readers.

commit e4d0b226391948ef433f1d0135814315e4c48535
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Aug 7 04:25:51 2010 +0000

    log ERROR messages if workers exit with failure

    Something is wrong if workers exit with a non-zero status,
    so we'll increase the log level to help prevent people
    from missing it.

commit f1d33c80dd6c5650f960f7087f4e08f809754d34
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jul 16 08:25:32 2010 +0000

    SIGTTIN works after SIGWINCH

    In addition to SIGHUP, it should be possible to gradually bring
    workers back up (to avoid overloading the machine) when rolling
    back upgrades after SIGWINCH.

    Noticed-by: Lawrence Pit
    ref: http://mid.gmane.org/4C3F8C9F.2090903@gmail.com

commit 5a0506c2affd2f5abe6e7315121e67aa3e32b253
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jul 16 08:25:32 2010 +0000

    SIGTTIN works after SIGWINCH

    In addition to SIGHUP, it should be possible to gradually bring
    workers back up (to avoid overloading the machine) when rolling
    back upgrades after SIGWINCH.

    Noticed-by: Lawrence Pit
    ref: http://mid.gmane.org/4C3F8C9F.2090903@gmail.com
    (cherry picked from commit e75ee7615f9875db314a6403964e7b69a68b0521)

commit 78ba3899eb24d6893e34984b9f1c479c7e6c9be3
Merge: c13bec3 d1818d2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 13 13:04:53 2010 -0700

    Merge branch '1.1.x-stable'

    * 1.1.x-stable: (27 commits)
      unicorn 1.1.2 - fixing upgrade rollbacks
      unicorn 1.0.1 - bugfixes only
      SIGHUP deals w/ dual master pid path scenario
      launcher: do not re-daemonize when USR2 upgrading
      SIGHUP deals w/ dual master pid path scenario
      launcher: do not re-daemonize when USR2 upgrading
      unicorn 1.1.1 - fixing cleanups gone bad :x
      tee_input: fix constant resolution for client EOF
      unicorn 1.1.0 - small changes and cleanups
      cleanup "stringio" require
      tee_input: safer record separator ($/) handling
      prefer "[]" to "first"/"last" where possible
      tee_input: safer record separator ($/) handling
      socket_helper: disable documentation
      socket_helper: cleanup FreeBSD accf_* detection
      socket_helper: no reason to check for logger method
      configurator: cleanup RDoc, un-indent
      configurator: documentation for new accept options
      socket_helper: move defaults to the DEFAULTS constant
      doc: recommend absolute paths for -c/--config-file
      ...

commit c13bec3449396b21795966101367838161612d61
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 13 08:57:37 2010 +0000

    SIGHUP deals w/ dual master pid path scenario

    As described in our SIGNALS documentation, sending SIGHUP to the
    old master (to respawn SIGWINCH-ed children) while the new
    master (spawned from SIGUSR2) is active is useful for backing
    out of an upgrade before sending SIGQUIT to the new master.

    Unfortunately, the SIGHUP signal to the old master will cause
    the ".oldbin" pid file to be reset to the non-".oldbin" version
    and thus attempt to clobber the pid file in use by the
    to-be-terminated new master process.

    Thanks to the previous commit to prevent redaemonization in the
    new master, the old master can reliably detect if the new master
    is active while it is reloading the config file.

    Thanks to Lawrence Pit for discovering this bug.
    ref: http://mid.gmane.org/4C3BEACF.7040301@gmail.com

commit 3f0f9d6d72cf17b34c130b86eb933bbc513b24b3
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 13 08:53:48 2010 +0000

    launcher: do not re-daemonize when USR2 upgrading

    This was accidentally enabled when ready_pipe was developed.
    While re-daemonizing appears harmless in most cases this makes
    detecting backed-out upgrades from the original master process
    impossible.

commit ac15513bb81a345cd12c67702a81a585b8b0514e
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sun Jul 11 02:05:01 2010 +0000

    tee_input: fix constant resolution for client EOF

    Noticed while hacking on a Zbatery-using application

commit 0fea004ab093ec4f59d919915a505a136326bd8a
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jul 8 05:54:25 2010 +0000

    cleanup "stringio" require

    "stringio" is part of the Ruby distro and we use it in multiple
    places, so avoid re-requiring it.

commit 5ece8c1c33f10e6496dfe5ae1d0d368293278d2d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jul 8 05:33:49 2010 +0000

    prefer "[]" to "first"/"last" where possible

    "[]" is slightly faster under Ruby 1.9 (but slightly
    slower under 1.8).

commit 1cd698f8c7938b1f19e9ba091708cb4515187939
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jul 8 05:14:55 2010 +0000

    tee_input: safer record separator ($/) handling

    Different threads may change $/ during execution, so cache it at
    function entry to a local variable for safety.  $/ may also be
    of a non-binary encoding, so rely on Rack::Utils.bytesize to
    portably capture the correct size.

    Our string slicing is always safe from 1.9 encoding: both our
    socket and backing temporary file are opened in binary mode,
    so we'll always be dealing with binary strings in this class
    (in accordance to the Rack spec).

commit 98c51edf8b6f031a655a93b52808c9f9b78fb6fa
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 6 14:17:02 2010 -0700

    socket_helper: disable documentation for internals

commit 2b4b15cf513f66dc7a5aabaae4491c17895c288c
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 6 12:59:45 2010 -0700

    socket_helper: cleanup FreeBSD accf_* detection

    Instead of detecting at startup if filters may be used, just try
    anyways and log the error.  It is better to ask for forgiveness
    than permission :)

commit e0ea1e1548a807d152c0ffc175915e98addfe1f2
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 6 12:51:24 2010 -0700

    socket_helper: no reason to check for logger method

    We only use this module in HttpServer and our unit test mocks
    it properly.

commit e4d2c7c302e96ee504d82376885ac6b1897c666a
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 6 12:49:48 2010 -0700

    configurator: cleanup RDoc, un-indent

    No point in redeclaring the Unicorn module in here.

commit 686281a90a9b47bac4dfd32a72a97e6e8d26afa1
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 6 12:39:36 2010 -0700

    configurator: documentation for new accept options

    The defaults should be reasonable, but there may be
    folks who want to experiment.

commit ef8f888ba1bacc759156f7336d39ba9b947e3f9d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Tue Jul 6 12:35:45 2010 -0700

    socket_helper: move defaults to the DEFAULTS constant

    This is to allow Rainbows! to override the defaults.

commit d7695c25c5e3b1c90e63bf15a5c5fdf68bfd0c34
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Jul 5 23:14:40 2010 +0000

    doc: recommend absolute paths for -c/--config-file

    Suggested-by: Jeremy Evans
    ref: http://mid.gmane.org/AANLkTintT4vHGEdueuG45_RwJqFCToHi5pm2-WKDSUMz@mail.gmail.com

commit 646cc762cc9297510102fc094f3af8a5a9e296c7
Author: Eric Wong <normalperson@yhbt.net>
Date:   Sat Jul 3 09:30:57 2010 +0000

    socket_helper: tunables for tcp_defer_accept/accept_filter

    Under Linux, this allows users to tune the time (in seconds) to
    defer connections before allowing them to be accepted.  The
    behavior of TCP_DEFER_ACCEPT changed with Linux 2.6.32 and idle
    connections may still be accept()-ed after the specified value
    in seconds.  A small value of '1' remains the default for
    Unicorn as Unicorn does not worry about slow clients.  Higher
    values provide better DoS protection for Rainbows! but also
    increases kernel memory usage.

    Allowing "dataready" for FreeBSD accept filters will allow
    SSL sockets to be used in the future for HTTPS, too.

commit 5769f313793ca84100f089b1911f2e22d0a31e9d
Author: Eric Wong <normalperson@yhbt.net>
Date:   Mon Jun 28 04:45:16 2010 +0000

    http_response: this should be a module, not a class

    This affects Rainbows!, but Rainbows! is still using the Unicorn
    1.x branch.  While we're at it, avoid redeclaring the "Unicorn"
    module, it makes documentation noisier.

commit cf63db66bca9acfd3416ab8fc8a7fd4f07927342
Author: Eric Wong <normalperson@yhbt.net>
Date:   Fri Jun 25 11:29:13 2010 -0700

    test-exec: prefer ENV['PWD'] in working_directory tests

    We do an extra check in the application dispatch to ensure
    ENV['PWD'] is set correctly to match Dir.pwd (even if the
    string path is different) as this is required for Capistrano
    deployments.

    These tests should now pass under OSX where /var is apparently
    a symlink to /private/var.

commit e2503a78150f4be113ee2a19404ba6aec401c696
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jun 24 05:47:27 2010 +0000

    const: bump UNICORN_VERSION to 2.0.0pre

commit b8b979d75519be1c84818f32b83d85f8ec5f6072
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jun 24 04:31:37 2010 +0000

    http: avoid (re-)declaring the Unicorn module

    It makes for messy documentation.

commit 6f720afd95d8131a2657c643b97cb18c750ed9f8
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jun 24 04:24:34 2010 +0000

    tee_input: undent, avoid (re)-declaring "module Unicorn"

    It makes RDoc look better and cleaner, since we don't
    do anything in the Unicorn namespace.

commit 9f48be69bfe579dab02b5fe8d6e728ae63fd24fc
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jun 24 04:11:35 2010 +0000

    tee_input: allow tuning of client_body_buffer_size/io_size

    Some folks may require more fine-grained control of buffering
    and I/O chunk sizes, so we'll support them (unofficially, for
    now).

commit 1a49a8295054a2e931f5288540acb858be8edcc8
Author: Eric Wong <normalperson@yhbt.net>
Date:   Thu Jun 24 03:54:40 2010 +0000

    tee_input: (nitpick) use IO#rewind instead of IO#seek(0)

    no need to pass an extra argument

[Validate]

Generated with the Darkfish Rdoc Generator 2.