[ANN] OpenResty released

Yichun Zhang (agentzh) agentzh at gmail.com
Tue Apr 29 21:47:12 UTC 2014

Hi guys!

I am happy to announce the new release of the OpenResty bundle:


Special thanks go to all our contributors for making this happen!

Our current focus has still been on improving both performance and stability.

And most of our OpenResty sub-projects' git repositories have been
moved over to the GitHub account "openresty":


Thanks Kindy Lin for acquiring this GitHub account :)

Below is the complete change log for this release, as compared to the
last formal release,

 *   upgraded the Nginx core to 1.5.12.

     *   see the changes here: <http://nginx.org/en/CHANGES>

 *   upgraded LuaJIT to v2.1-20140423 (see
     https://github.com/openresty/luajit2/releases ).

     *   bugfix: prevent adding side traces for stack checks. (Mike
         pall) this could cause internal assertion failure in the JIT
         compiler while replaying snapshots in very obscure cases:
         "lj_snap.c:497: lj_snap_replay: Assertion `ir->o == IR_CONV
         && ir->op2 == ((IRT_NUM<<5)|IRT_INT)' failed."

     *   bugfix: fixed FOLD of string concatenations. (Mike Pall)
         this issue was reported by leafo and could lead to invalid
         string results in special cases while compiling string

     *   bugfix: FFI: fixed cdata equality comparison against strings
         and other Lua types. (Mike Pall)

     *   bugfix: fixed top slot calculation for snapshots with
         continuations. (Mike Pall) this was a bug in snapshot
         generation, but it only surfaced with trace stitching. it
         could cause Lua stack overwrites in special cases.

     *   bugfix: PPC: don't use mcrxr on PPE. (Mike Pall)

     *   bugfix: prevent GC estimate miscalculation due to buffer
         growth. (Mike Pall)

     *   bugfix: fixed the regression introduced by the previous fix
         for "reuse of SCEV results in FORL". (Mike Pall) this could
         cause internal assertion failure in the JIT compiler:
         "lj_record.c:68: rec_check_ir: Assertion `op2 >= nk'

     *   bugfix: fixed alias analysis for "table.len" vs.
         "table.clear". (Mike Pall) this could cause "table.len" to
         return incorrect values (nonzero values) after "table.clear"
         was performed.

     *   bugfix: fixed the compatibility with DragonFlyBSD. thanks
         lhmwzy for the patch.

     *   feature: allow non-scalar cdata to be compared for equality
         by address. (Mike Pall)

 *   upgraded LuaUpstreamNginxModule to 0.02.

     *   bugfix: upstream names did not support taking a port number.
         thanks magicleo for the report.

 *   upgraded Redis2NginxModule to 0.11.

     *   change: now we always ignore client aborts for
         collaborations with other modules like SrcacheNginxModule.
         thanks akamatgi for the report.

 *   upgraded LuaNginxModule to 0.9.7.

     *   bugfix: when lua_code_cache was off, cosocket:setkeepalive()
         might lead to segmentation faults. thanks Kelvin Peng for
         the report.

     *   refactor: improved the error handling and logging in the Lua
         code loader and closure factory.

     *   change: added stronger assertions to the stream-typed
         cosocket implementation.

     *   optimize: we no longer call "ngx_pfree()" in our own
         "pcre_free" hook.

     *   optimize: we no longer clear the pointer "ctx->user_co_ctx"
         in "ngx_http_lua_reset_ctx".

 *   upgraded EchoNginxModule to 0.53.

     *   bugfix: use of empty arguments after the "-n" option of the
         echo directive (and its friends) might cause subsequent
         arguments to get discarded. thanks Lice Pan for the report
         and fix.

 *   upgraded FormInputNginxModule to 0.08.

     *   bugfix: segmentation fault might happen when
         "set_form_input_multi" was used while no proper
         "Content-Type" request header was given.

 *   upgraded LuaRestyWebSocketLibrary to 0.03.

     *   optimize: added a minor optimization in the recv_frame()
         method. thanks yurnerola for the catch.

 *   upgraded LuaRestyCoreLibrary to 0.0.6.

     *   optimize: ngx.re.sub/ngx.re.gsub: now we avoid constructing
         new Lua strings for the regex cache keys, which gives 5%
         speedup for trivial use cases.

     *   optimize: ngx.re.match/ngx.re.find: avoided constructing a
         new Lua string for the regex cache key by switching over to
         a cascaded 2-level hash table, which gives 22% speedup for
         simple use cases.

 *   upgraded LuaRestyLockLibrary to 0.03.

     *   bugfix: prevented using cdata directly as table keys.

 *   upgraded LuaRestyStringLibrary to 0.09.

     *   bugfix: avoided using the "module" builtin function to
         define lua modules. thanks lhmwzy for the original patch.

The HTML version of the change log with lots of helpful hyper-links
can be browsed here:


OpenResty (aka. ngx_openresty) is a full-fledged web application
server by bundling the standard Nginx core, lots of 3rd-party Nginx
modules and Lua libraries, as well as most of their external
dependencies. See OpenResty's homepage for details:


We have run extensive testing on our Amazon EC2 test cluster and
ensured that all the components (including the Nginx core) play well
together. The latest test report can always be found here:


Just a side note: I recently added the "Profiling page" to the
openresty.org site where you can find useful Flame Graph tools for
analyzing and optimizing OpenResty web apps' online performance (as
well as ordinary nginx and even other C/C++ user processes):


We've been heavily relying on these tools to get our Lua CDN and Lua
WAF faster and faster in the past year at CloudFlare.

Have fun!

More information about the nginx mailing list