Files | Admin

Notes:

Release Name: 0.92.0

Notes:
HTTP server for Rack applications designed to take advantage of features
in Unix/Unix-like operating systems and serve low-latency, high-bandwidth
clients (such as a buffering reverse proxy server).

* http://unicorn.bogomips.org/
* mongrel-unicorn@rubyforge.org
* git://git.bogomips.org/unicorn.git

Changes:

Small fixes and documentation are the focus of this release.

James Golick reported and helped me track down a bug that caused
SIGHUP to drop the default listener (0.0.0.0:8080) if and only
if listeners were completely unspecified in both the
command-line and Unicorn config file.  The Unicorn config file
remains the recommended option for specifying listeners as it
allows fine-tuning of the :backlog, :rcvbuf, :sndbuf,
:tcp_nopush, and :tcp_nodelay options.

There are some documentation (and resulting website)
improvements.  setup.rb users will notice the new section 1
manpages for `unicorn` and `unicorn_rails`, Rubygems users
will have to install manpages manually or use the website.

The HTTP parser got a 3rd-party code review which resulted in
some cleanups and one insignificant bugfix as a result.

Additionally, the HTTP parser compiles, runs and passes unit
tests under Rubinius.  The pure-Ruby parts still do not work yet
and we currently lack the resources/interest to pursue this
further but help will be gladly accepted.

The website now has an Atom feed for new release announcements.
Those unfamiliar with Atom or HTTP may finger unicorn@bogomips.org
for the latest announcements.

Eric Wong (53):
      README: update with current version
      http: cleanup and avoid potential signedness warning
      http: clarify the setting of the actual header in the hash
      http: switch to macros for bitflag handling
      http: refactor keepalive tracking to functions
      http: use explicit elses for readability
      http: remove needless goto
      http: extra assertion when advancing p manually
      http: verbose assertions
      http: NIL_P(var) instead of var == Qnil
      http: rb_gc_mark already ignores immediates
      http: ignore Host: continuation lines with absolute URIs
      doc/SIGNALS: fix the no-longer-true bit about socket options
      "encoding: binary" comments for all sources (1.9)
      http_response: don't "rescue nil" for body.close
      CONTRIBUTORS: fix capitalization for why
      http: support Rubies without the OBJ_FROZEN macro
      http: define OFFT2NUM macro on Rubies without it
      http: no-op rb_str_modify() for Rubies without it
      http: compile with -fPIC
      http: use rb_str_{update,flush} if available
      http: create a new string buffer on empty values
      Update documentation for Rubinius support status
      http: cleanup assertion for memoized header strings
      http: add #endif comment labels where appropriate
      Add .mailmap file for "git shortlog" and other tools
      Update Manifest with mailmap
      Fix comment about speculative accept()
      SIGNALS: use "Unicorn" when referring to the web server
      Add new Documentation section for manpages
      test_exec: add extra tests for HUP and preload_app
      socket_helper: (FreeBSD) don't freeze the accept filter constant
      Avoid freezing objects that don't benefit from it
      SIGHUP no longer drops lone, default listener
      doc: generate ChangeLog and NEWS file for RDoc
      Remove Echoe and roll our own packaging/release...
      unicorn_rails: close parentheses in help message
      launchers: deprecate ambiguous -P/--p* switches
      man1/unicorn: avoid unnecessary emphasis
      Add unicorn_rails(1) manpage
      Documentation: don't force --rsyncable flag with gzip(1)
      Simplify and standardize manpages build/install
      GNUmakefile: package .tgz includes all generated files
      doc: begin integration of HTML manpages into RDoc
      Update TODO
      html: add Atom feeds
      doc: latest news is available through finger
      NEWS.atom: file timestamp matches latest entry
      pandoc needs the standalone switch for manpages
      man1/unicorn: split out RACK ENVIRONMENT section
      man1/unicorn_rails: fix unescaped underscore
      NEWS.atom.xml only lists the first 10 entries
      unicorn 0.92.0



Changes: CHANGELOG => .CHANGELOG.old | 0 .document | 4 + .gitignore | 5 + .mailmap | 26 +++ CONTRIBUTORS | 2 +- Documentation/.gitignore | 5 + Documentation/GNUmakefile | 30 +++ Documentation/unicorn.1.txt | 158 +++++++++++++++ Documentation/unicorn_rails.1.txt | 150 ++++++++++++++ GIT-VERSION-GEN | 40 ++++ GNUmakefile | 116 ++++++++++-- Manifest | 137 ------------- README | 5 +- Rakefile | 136 ++++++++++--- SIGNALS | 6 +- TODO | 12 +- bin/unicorn | 7 +- bin/unicorn_rails | 8 +- ext/unicorn_http/c_util.h | 4 +- ext/unicorn_http/common_field_optimization.h | 3 +- ext/unicorn_http/ext_help.h | 33 +++- ext/unicorn_http/extconf.rb | 5 + ext/unicorn_http/unicorn_http.rl | 207 ++++++++++++------- lib/unicorn.rb | 8 +- lib/unicorn/app/exec_cgi.rb | 4 +- lib/unicorn/app/inetd.rb | 2 + lib/unicorn/app/old_rails.rb | 2 + lib/unicorn/app/old_rails/static.rb | 4 +- lib/unicorn/cgi_wrapper.rb | 4 +- lib/unicorn/configurator.rb | 2 + lib/unicorn/const.rb | 14 +- lib/unicorn/http_request.rb | 11 +- lib/unicorn/http_response.rb | 6 +- lib/unicorn/launcher.rb | 6 + lib/unicorn/socket_helper.rb | 10 +- lib/unicorn/tee_input.rb | 2 + lib/unicorn/util.rb | 2 + local.mk.sample | 6 +- setup.rb | 1 + test/aggregate.rb | 2 + test/exec/test_exec.rb | 157 +++++++++++++++ .../rails/app-1.2.3/app/controllers/application.rb | 2 + .../app-1.2.3/app/controllers/foo_controller.rb | 2 + .../app-1.2.3/app/helpers/application_helper.rb | 2 + test/rails/app-1.2.3/config/boot.rb | 2 + test/rails/app-1.2.3/config/environment.rb | 2 + .../app-1.2.3/config/environments/development.rb | 2 + .../app-1.2.3/config/environments/production.rb | 2 + test/rails/app-1.2.3/config/routes.rb | 2 + .../rails/app-2.0.2/app/controllers/application.rb | 2 + .../app-2.0.2/app/controllers/foo_controller.rb | 2 + .../app-2.0.2/app/helpers/application_helper.rb | 2 + test/rails/app-2.0.2/config/boot.rb | 2 + test/rails/app-2.0.2/config/environment.rb | 2 + .../app-2.0.2/config/environments/development.rb | 2 + .../app-2.0.2/config/environments/production.rb | 2 + test/rails/app-2.0.2/config/routes.rb | 2 + .../rails/app-2.1.2/app/controllers/application.rb | 2 + .../app-2.1.2/app/controllers/foo_controller.rb | 2 + .../app-2.1.2/app/helpers/application_helper.rb | 2 + test/rails/app-2.1.2/config/boot.rb | 2 + test/rails/app-2.1.2/config/environment.rb | 2 + .../app-2.1.2/config/environments/development.rb | 2 + .../app-2.1.2/config/environments/production.rb | 2 + test/rails/app-2.1.2/config/routes.rb | 2 + .../rails/app-2.2.2/app/controllers/application.rb | 2 + .../app-2.2.2/app/controllers/foo_controller.rb | 2 + .../app-2.2.2/app/helpers/application_helper.rb | 2 + test/rails/app-2.2.2/config/boot.rb | 2 + test/rails/app-2.2.2/config/environment.rb | 2 + .../app-2.2.2/config/environments/development.rb | 2 + .../app-2.2.2/config/environments/production.rb | 2 + test/rails/app-2.2.2/config/routes.rb | 2 + .../app/controllers/application_controller.rb | 2 + .../app-2.3.3.1/app/controllers/foo_controller.rb | 2 + .../app-2.3.3.1/app/helpers/application_helper.rb | 2 + test/rails/app-2.3.3.1/config/boot.rb | 2 + test/rails/app-2.3.3.1/config/environment.rb | 2 + .../app-2.3.3.1/config/environments/development.rb | 2 + .../app-2.3.3.1/config/environments/production.rb | 2 + test/rails/app-2.3.3.1/config/routes.rb | 2 + test/rails/test_rails.rb | 2 + test/test_helper.rb | 8 + test/unit/test_configurator.rb | 2 + test/unit/test_http_parser.rb | 13 ++ test/unit/test_http_parser_ng.rb | 2 + test/unit/test_request.rb | 2 + test/unit/test_response.rb | 2 + test/unit/test_server.rb | 2 + test/unit/test_signals.rb | 2 + test/unit/test_socket_helper.rb | 2 + test/unit/test_tee_input.rb | 3 +- test/unit/test_upload.rb | 2 + test/unit/test_util.rb | 2 + unicorn.gemspec | 46 +++++ 95 files changed, 1199 insertions(+), 313 deletions(-) commit 76130578eb270391bf4afd3c9b74dd1bdb8a3dca Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 14:15:30 2009 -0700 unicorn 0.92.0 Small fixes and documentation are the focus of this release. James Golick reported and helped me track down a bug that caused SIGHUP to drop the default listener (0.0.0.0:8080) if and only if listeners were completely unspecified in both the command-line and Unicorn config file. The Unicorn config file remains the recommended option for specifying listeners as it allows fine-tuning of the :backlog, :rcvbuf, :sndbuf, :tcp_nopush, and :tcp_nodelay options. There are some documentation (and resulting website) improvements. setup.rb users will notice the new section 1 manpages for `unicorn` and `unicorn_rails`, Rubygems users will have to install manpages manually or use the website. The HTTP parser got a 3rd-party code review which resulted in some cleanups and one insignificant bugfix as a result. Additionally, the HTTP parser compiles, runs and passes unit tests under Rubinius. The pure-Ruby parts still do not work yet and we currently lack the resources/interest to pursue this further but help will be gladly accepted. The website now has an Atom feed for new release announcements. Those unfamiliar with Atom or HTTP may finger unicorn@bogomips.org for the latest announcements. commit 7c45d8dbfd8e7f8f7279bab67058109d244d9752 Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 14:38:45 2009 -0700 NEWS.atom.xml only lists the first 10 entries No need to waste bandwidth with more. commit 0333babe7f25640c3b24b117065a18cc266d114e Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 14:09:30 2009 -0700 man1/unicorn_rails: fix unescaped underscore commit 71d47a28731cd08b0b831d49ff022760726a6625 Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 14:06:57 2009 -0700 man1/unicorn: split out RACK ENVIRONMENT section The inline formatting for the CLI switch was too hard to get right and was too long anyways. commit 2b1b119f93cb19946b92496f56350140472b400b Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 14:04:54 2009 -0700 pandoc needs the standalone switch for manpages Otherwise we end up with unreadable manpages. commit fbe63c175d0fb0ca67ea726cd1126540a76ea80a Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 13:55:30 2009 -0700 NEWS.atom: file timestamp matches latest entry Avoid needlessly wasting readers' bandwidth if they're caching. commit c7e2cef8bfc5dd72f5722917429183045eef7e5e Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 13:24:46 2009 -0700 doc: latest news is available through finger We're expanding our target audience to folks that do not use HTTP (yet). commit ebcbbc995a86698c29ee4784abb540bf5a872945 Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 18 03:16:51 2009 -0700 html: add Atom feeds The ChangeLog feed points to the cgit repository viewer and the NEWS one is its own feed of tags. Web 2.0 here we come! commit 5af05213b6629b2d61435d10101c68305608c0d2 Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 20:31:06 2009 -0700 Update TODO commit 711ca5408415fd3f435d0a36d3284baeda51ce28 Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 20:15:31 2009 -0700 doc: begin integration of HTML manpages into RDoc Kinda sorta works, still some Markdown => HTML formatting issues to work out but it gives the site a reasonably consistent look. commit e46489991e6306ed5ebdbb3f8e72d21070f1317b Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 19:34:43 2009 -0700 GNUmakefile: package .tgz includes all generated files Additionally, force ourselves to verify our working tree against $(VERSION) when doing releases because we don't want to screw that up. commit bdbd96ab70a2702a7d26e6638e096b2f64346853 Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 19:25:54 2009 -0700 Simplify and standardize manpages build/install setup.rb users will now be able to install manpages under man/man1 automatically, no solution for Rubygems users yet. gzipped manpages are no longer created by default, either, it's probably up to distros to do it. commit 032a79dbf1fb89bbf090f03af199b80d5ff1175d Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 18:55:37 2009 -0700 Documentation: don't force --rsyncable flag with gzip(1) It may not be portable to older versions of gzip commit f2f8f89e5e17c68b275e0a0804a698742803e551 Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 18:40:48 2009 -0700 Add unicorn_rails(1) manpage commit ff52d8e0c3bf10410745d39b640dfc6c7d4394bf Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 18:32:31 2009 -0700 man1/unicorn: avoid unnecessary emphasis SCREAMING is already sufficient without *BOLDNESS* commit 94029de6bd2b2ada38dfd6efc536a7a950b0a12f Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 17:52:27 2009 -0700 launchers: deprecate ambiguous -P/--p* switches `unicorn` tries to mimic `rackup` on the command-line to ease adoption. `unicorn_rails` tries to be somewhat like `rackup` as well, but then also tries to be consistent with `script/server` resulting some amount of confusion with regard to the -P/(--path|--pid) switch. Outright removal of these switches will probably not happen any time soon because we have command-lines inherited across processes, but we can stop advertising them. Since our (Unicorn) config file format is fortunately consistent between Rails and !Rails, recommend the "pid" directive be used instead. User interfaces are really, really tough to get right... commit 577f2f88748221a8fd14eea5e72c7299c7b1664a Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 17:24:47 2009 -0700 unicorn_rails: close parentheses in help message commit 8d1b95587c1ebea4631c66b8e7e4130153c70b26 Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 02:55:01 2009 -0700 Remove Echoe and roll our own packaging/release... * Manifest/CHANGELOG can be maintainance is painful. I really hate having those in the source tree when I have a version control system that already: 1) encourages me to make meaningful commits 2) is highly scriptable for generating manifests/changelogs * hand-rolled gemspec allows more control for specifying pre-release gem versions * Less magic over what the `rubyforge` command does, being able to spawn $VISUAL on changelogs/release notes and make edits on them is nice. Additionally I still strongly prefer GNU make over Rake for many tasks since it offers better parallelization and some things are easier *for me* in shell than Ruby. commit 382d12a414942f027ea30911294cd8c8becdf2cd Author: Eric Wong <normalperson@yhbt.net> Date: Thu Sep 17 02:55:00 2009 -0700 doc: generate ChangeLog and NEWS file for RDoc No point in having those files under revision control or repeating work to generate them. commit 9435ee2d5111394739b82d0f8a275deca8d505be Author: Eric Wong <normalperson@yhbt.net> Date: Wed Sep 16 23:04:37 2009 -0700 SIGHUP no longer drops lone, default listener When SIGHUP reloads the config, we didn't account for the case where the listen socket was completely unspecified. Thus the default listener (0.0.0.0:8080), did not get preserved and re-injected into the config properly. Note that relying on the default listen or specifying listeners on the command-line means it's /practically/ impossible to _unbind_ those listeners with a configuration file reload. We also need to preserve the (unspecified) default listener across upgrades that later result in SIGHUP, too; so the easiest way is to inject the default listener into the command-line for upgrades. Many thanks to James Golick for reporting and helping me track down the bug since this behavior is difficult to write reliable automated tests for. Signed-off-by: Eric Wong <normalperson@yhbt.net> commit 04c7fc37ab4fb2fbaa1b4a2570871713cf9d1319 Author: Eric Wong <normalperson@yhbt.net> Date: Wed Sep 16 16:56:22 2009 -0700 Avoid freezing objects that don't benefit from it This gives applications more rope to play with in case they have any reasons for changing some values of the default constants. Freezing strings for Hash assignments still speeds up MRI, so we'll keep on doing that for now (and as long as MRI supports frozen strings, I expect them to always be faster for Hashes though I'd be very happy to be proven wrong...) commit 045f6d741020d4a77bd68bd80891a97782d54850 Author: Eric Wong <normalperson@yhbt.net> Date: Wed Sep 16 16:07:16 2009 -0700 socket_helper: (FreeBSD) don't freeze the accept filter constant We may add support for the Gopher protocol in the future... commit ac4537afc4eddfb68bc7807f7a6140afb7160328 Author: Eric Wong <normalperson@yhbt.net> Date: Wed Sep 16 12:11:56 2009 -0700 test_exec: add extra tests for HUP and preload_app Just to ensure we handle HUP correctly since preload_app changes the behavior of HUP handling a bit. commit bd075c8f746dfa97e3e2fe74a262e747806cf772 Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 22:43:03 2009 -0700 Add new Documentation section for manpages Only "unicorn(1)" is documented right now, but more will be added. Manpages are written Markdown since it's easy to write, easy to read (in source form) and a widely-implemented format. As of September 2009, pandoc is the only Markdown processor I know of capable of turning Markdown into manpages. So despite adding a dependency on Haskell (not yet very common these days) for documentation, the features and performance of pandoc+Markdown outweigh the drawbacks compared to other lightweight markup systems. commit 8f0f376e49b1b3f924ac4856ccff201b975f5f79 Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 23:16:59 2009 -0700 SIGNALS: use "Unicorn" when referring to the web server "unicorn" (lower-case) refers to the executable script commit a418c88efb4b122d381bf97bfb20f0ec2e2cc29c Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 16:18:40 2009 -0700 Fix comment about speculative accept() We used to try it on every listener, but then rarely-used listener ports used mainly for monitoring/debugging would have accept() unnecessary called, getting unnecessarily expensive inside the kernel. commit 1309e7e19092021d252bd948732ae65e4bc22122 Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 02:11:11 2009 -0700 Update Manifest with mailmap commit 59a62398eeba276dab30861cc34ce054d2a725aa Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 01:11:25 2009 -0700 Add .mailmap file for "git shortlog" and other tools This lets us avoid those ugly <user@UUID> faux email addresses that "git svn" generates when "git svn" is not used with --authors-file. commit 8ddead3eca7ca752379613220c946223c7695752 Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 01:18:40 2009 -0700 http: add #endif comment labels where appropriate Sometimes I end up hacking on 10-row high terminals and need more context :x commit 7ad9fd8b217eedd7cab2dc9e1dd5475244d16957 Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 01:14:18 2009 -0700 http: cleanup assertion for memoized header strings assert_frozen() should not be checking what type of object it is, instead put an extra assertion in there to ensure we have a string. commit 3766ae735635eabafeeb73f44c2bc19e5ca180a6 Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 15 00:16:56 2009 -0700 Update documentation for Rubinius support status Note that Rubinius itself is still under heavy development, so things we fix may break again. The pure-Ruby parts of Unicorn don't even work properly on Rubinius. commit 990fedf9933e088a6d0ca30b2e330b58d20bc488 Author: Eric Wong <normalperson@yhbt.net> Date: Mon Sep 14 23:55:26 2009 -0700 http: create a new string buffer on empty values Since empty values on one line can be a heuristic to determine future lines are continuation lines (and a as a result, a decently long header), pre-allocate a string buffer just in case. This is to workaround what appears to be bug in the Rubinius C API, but it could be considered (intended) DWIM behavior, too... commit a03116fc5b290e5af9a17e7a01558cd1d01ecde4 Author: Eric Wong <normalperson@yhbt.net> Date: Mon Sep 14 23:13:56 2009 -0700 http: use rb_str_{update,flush} if available Rubinius supports these functions as of 039091066244cfcf483310b86b5c4989aaa6302b This allows the test_http_parser_ng.rb test to run under Rubinius db612aa62cad9e5cc41a4a4be645642362029d20 commit 06efebe6139acbe819ef5c4e8b0e832c113fb9ef Author: Eric Wong <normalperson@yhbt.net> Date: Mon Sep 14 17:45:32 2009 -0700 http: compile with -fPIC Rubinius doesn't seem to set this by default commit f37c23704cb73d57e9e478295d1641df1d9104c7 Author: Eric Wong <normalperson@yhbt.net> Date: Mon Sep 14 17:34:46 2009 -0700 http: no-op rb_str_modify() for Rubies without it Rubinius has no rb_str_modify() function, it /may/ not need it. commit faeb894d1db8e6893405545f00ae5da01157015e Author: Eric Wong <normalperson@yhbt.net> Date: Mon Sep 14 17:24:42 2009 -0700 http: define OFFT2NUM macro on Rubies without it Hope they have the LL2NUM macro (Rubinius does) commit dbca9cc80d682305440ac4a94c5c72c8cf076021 Author: Eric Wong <normalperson@yhbt.net> Date: Mon Sep 14 17:08:18 2009 -0700 http: support Rubies without the OBJ_FROZEN macro Rubinius does not support frozen objects, maybe other Rubies lack support for it as well. commit 524aaed06a00780d698ad2becd66bd6d7fa5723d Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 13 23:42:37 2009 -0700 CONTRIBUTORS: fix capitalization for why He contributed to Mongrel back in the day and isn't around Ruby anymore, but at least get his preferred (lack-of) capitalization right... commit 0d354a3cb78a8fe08fac8a91e945dcb50db5ca55 Author: Eric Wong <normalperson@yhbt.net> Date: Wed Sep 9 12:46:13 2009 -0700 http_response: don't "rescue nil" for body.close This can hide bugs in Rack applications/middleware. Most other Rack handlers/servers seem to follow this route as well, so this helps ensure broken things will break loudly and more consistently across all Rack-enabled servers :) commit 84081b4508c51d04a4a9019fcffe0e034b0b2d39 Author: Eric Wong <normalperson@yhbt.net> Date: Tue Sep 8 15:10:04 2009 -0700 "encoding: binary" comments for all sources (1.9) This ensures any string literals that pop up in *our* code will just be a bag of bytes. This shouldn't affect/fix/break existing apps in most cases, but most constants will always have the "correct" encoding (none!) to be consistent with HTTP/socket expectations. Since this comment affects things only on a per-source basis, it won't affect existing apps with the exception of strings we pass to the Rack application. This will eventually allow us to get rid of that Unicorn::Z constant, too. commit e9b8313d80c9ca870a25f7047454c98b81dd7c85 Author: Eric Wong <normalperson@yhbt.net> Date: Mon Sep 7 17:30:49 2009 -0700 doc/SIGNALS: fix the no-longer-true bit about socket options This hasn't been true since 3e9fe197d4daac14fa98addfcf9be3208c7b96b8 commit 1b1029efa7089a8a3628286fe006b1fc1ae8601e Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:57 2009 -0700 http: ignore Host: continuation lines with absolute URIs This probably doesn't affect anyone with HTTP/1.1, but future versions of HTTP will use absolute URIs and maybe we'll eventually get clients that (mistakenly) send us Host: headers along with absolute URIs. commit 2213d73a2d23bb39e8a4fa82a33d03daf4c39df2 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:56 2009 -0700 http: rb_gc_mark already ignores immediates No need to add an extra check, even if it does avoid a function call. commit 0e62a00e2b4821a647f382b1649f744f87f959fc Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:55 2009 -0700 http: NIL_P(var) instead of var == Qnil This should be more inline with Ruby standards/coding style and probably more future-proof, as well. commit ee9ed5f58ca1390617595b3b22eb574fdd67a788 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:54 2009 -0700 http: verbose assertions This makes it easier for bug reporters to tell us what's wrong in case line numbers change. commit 5d2f50294ddc0a6689ef5c30cc890f008a6ee173 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:53 2009 -0700 http: extra assertion when advancing p manually Just in case, it'll be easier to track down if bugs pop up. commit 21e1fd3f5c53ea3833d54c18e1a4b92e710e1189 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:52 2009 -0700 http: remove needless goto There's no need to use a goto here to avoid one level of nesting. commit 56c31ac07e737eb0566c21f08612c04371eb9e68 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:51 2009 -0700 http: use explicit elses for readability This should make code easier to read and follow. commit 48d5cd51210aa3d9e6efb0989b9a6df1e8623fb3 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:50 2009 -0700 http: refactor keepalive tracking to functions In case we modify our struct to not use bitflags, this should make it easier to change the parser code. This also adds extra clarification for how we track keepalive and why we only do it for certain request methods. commit 106b6cd1dd9f541d15b0ced3060362edf968f9a9 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:49 2009 -0700 http: switch to macros for bitflag handling These are similar to the macros found in MRI, and can more easily allow us to swap out the bitflags for real struct members... commit 78c7455fc3c7e0e464134d5d294e6185a0114e56 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:48 2009 -0700 http: clarify the setting of the actual header in the hash Avoid a negative conditional in the process and having an explicit else in there makes this piece easier to track. Also explain /why/ the Host: header can get ignored. commit bace4364e8a7d0ac261e407732b9354d2f017045 Author: Eric Wong <normalperson@yhbt.net> Date: Sun Sep 6 14:29:47 2009 -0700 http: cleanup and avoid potential signedness warning Just pass the http_parser struct pointer when checking for invalid headers in the trailer. The compiler should be smart enough to inline and not relookup the flags. This avoids having to worry about the flags being signed or not (they should never be) and also makes it easier to maintain if we move away from using bitfields. commit 141eb25bf0a34d6994de71f71488e4d97727950b Author: Eric Wong <normalperson@yhbt.net> Date: Fri Sep 4 15:04:44 2009 -0700 README: update with current version