All Versions
Latest Version
Avg Release Cycle
30 days
Latest Release
560 days ago

Changelog History
Page 3

  • v0.6.0.beta Changes

    πŸ”– Version 0.6.0 is a major release, changing much of the extension API (HTTP, pub/sub, CLI) and some of the core API (i.e., moving the evio polling to One-Shot polling).

    πŸš€ In this beta 1 release:

    πŸ›  Fix (http): fixed an issue where receiving the same header name more than once would fail to convert the header value into an array of values.

    πŸ›  Minor fixes: more error handling, more tests, fixed fiobj_iseq to test hash keys as well as objects. The fio_hashmap.h key caching for removed objects is cleared when hash is empty (i.e, if it's empty, it's really empty).

    🐎 Performance minor improvements. For example, Header Hash Maps are now cleared and reused by HTTP/1.1 during keep-alive (instead of deallocated and reallocated).

  • v0.5.10 Changes

    πŸ›  Fix (backported): (facil / pubsub) fixed an issue where cluster messages would be corrupted when passed in high succession. Credit to Dmitry Davydov (@haukot) for exposing this issue through the Iodine server implementation (the Ruby port).

    It should be noted that this doesn't fix the core weakness related to large cluster or pub/sub messages, which is caused by a design weakness in the pipe implementation (in some kernels).

    πŸš€ The only solution for large message corruption is to use the new pub/sub engine introduced in the 0.6.x release branch, which utilizes Unix Sockets instead of pipes.

  • v0.5.9 Changes

    πŸ›  Fix (backported from 0.6.0): (websocket_parser) The websocket parser had a memory offset and alignment handling issue in it's unmasking (XOR) logic and the new memory alignment protection code. The issue would impact the parser in rare occasions when multiple messages where pipelined in the internal buffer and their length produced an odd alignment (the issue would occur with very fast clients, or a very stressed server).

  • v0.5.8 Changes

    πŸ›  Fix: (defer, fiobj) fix Linux compatibility concerns (when using GCC). Credit goes to @kotocom for opening issue #23.

  • v0.5.7 Changes

    πŸ›  Fix: (defer) fixes the non-debug version of the new (v.0.5.6) defer, which didn't define some debug macros.

    ⚑️ Updates: minor updates to the boilerplate documentation and the "new application" creation process.

  • v0.5.6 Changes

    πŸ›  Fix: Added cmake_minimum_required and related CMake fixes to the CMake file and generator. Credit to David MorΓ‘n (@david-moran) for PR #22 fixing the CMakelist.txt.

    Compatibility: (websocket_parser) removed unaligned memory access from the XOR logic in the parser, making it more compatible with older CPU systems that don't support unaligned memory access or 64 bit word lengths.

    Optimization: (defer) rewrote the data structure to use a hybrid cyclic buffer and linked list for the task queue (instead of a simple linked list), optimizing locality and minimizing memory allocations.

    Misc: minor updates and tweaks, such as adding the fiobj_ary2prt function for operations such as quick sort, updating some documentation etc'.

  • v0.5.5 Changes

    πŸ›  Fix: (fiobj) fixed an issue #21, where gcc would complain about overwriting the fio_cstr_s struct due to const members. Credit to @vit1251 for exposing this issue.

    πŸ›  Fix: (fiobj) fixed NULL pointer testing for fiobj_free(NULL).

    Compatibility: (gcc-6) Fix some compatibility concerns with gcc version 6, as well as some warnings that were exposed when testing with gcc.

    Optimization: (fiobj) optimized the JSON parsing memory allocations as well as fixed some of the function declarations to add the const keyword where relevant.

  • v0.5.4 Changes

    I've been making so many changes, it took me a while.

    πŸš€ This version includes all the updates in the unreleased version 0.5.3 as well as some extra work.

    πŸš€ The new HTTP/1.1 and Websocket parsers have been debugged and tested in the Iodine Ruby server, the dynamic type system (fiobj_s) will be updated to revision 2 in this release...

    ⚑️ Change/Update: (fiobj) The dynamic type library was redesigned to make it extendable. This means that code that used type testing using a switch statement needs to be rewritten.

    πŸ›  Fix: (websocket) issues with the new websocket parser were fixed. Credit to Tom Lahti (@uidzip) for exposing the issues.

  • v0.5.3 Changes

    πŸ”„ Change: minor changes to the versioning scheme removed some version MACROS... this isn't API related, so I don't consider it a breaking change, but it might effect code that relied too much on internal workings. The only valid version macros are the FACIL_VERSION_* macros, in the facil.h header.

    πŸ”„ Change: (http) the HTTP/1.x parser was re-written and replaced. It should perform the same, while being easier to maintain. Also, the new parser could potentially be used to author an HTTP client.

    πŸ”„ Change: (websocket) the Websocket parser was re-written and replaced, decoupling the parser and message wrapper from the IO layer. Performance might slightly improve, but should mostly remain the same. The new code is easier to maintain and easier to port to other implementations. Also, the new parser supports a client mode (message masking).

    πŸ›  Fix: (websocket) fix #16, where a client's first message could have been lost due to long on_open processing times. This was fixed by fragmenting the upgrade event into two events, adding the facil_attach_locked feature and attaching the new protocol before sending the response. Credit to @madsheep and @nilclass for exposing the issue and tracking it down to the on_open callbacks.

    πŸ›  Fix: (sock) sockets created using the TCP/IP sock library now use TCP_NODELAY as the new default. This shouldn't be considered a breaking change as much as it should be considered a fix.

    πŸ›  Fix: (http1) HTTP/1.x is now more fragmented, avoiding a read loop to allow for mid-stream / mid-processing protocol upgrades. This also fixes #16 at it's root (besides the improved websocket callback handling).

    πŸ›  Fix: (http1) HTTP/1.x now correctly initializes the udata pointer to NULL fore each new request.

    πŸ›  Fix: (facil) the facil_run_every function now correctly calls the on_finish callback when a timer initialization fails. This fixes a leak that could have occurred due to inconsistent API expectations. Workarounds written due to this issue should be removed.

    πŸ›  Fix: (facil) connection timeout is now correctly ignored for timers.

    πŸ›  Fix: (defer) a shutdown issue in defer_perform_in_fork was detected by @cdkrot and his fix was implemented.

    πŸ›  Fix: (evio) fixed an issue where the evented IO library failed to reset the state indicator after evio_close was called, causing some functions to believe that events are still processed. Now the evio_isactive will correctly indicate that the evented IO is inactive after evio_close was called.

    πŸ›  Fix: (evio) fixes an issue where evio_add_timer would fail with EEXIST instead of reporting success (this might be related to timer consolidation concerns in the Linux kernel).

    πŸ›  Fix: (evio) better timer fd creation compatibility with different Linux kernels.

    πŸ›  Fix: (documentation) credit to @cdkrot for reporting an outdated demo in the README.

    πŸ›  Fix: (linking) added the missing -lm linker flag for gcc/Linux (I was using clang, which automatically links to the math library, so I didn't notice this).

    Portability: added extern "C" directive for untested C++ support.

    πŸ”‹ Feature: πŸŽ‰ added a CLI helper service, allowing easy parsing and publishing of possible command line arguments.

    πŸ”‹ Feature: πŸŽ‰πŸŽ‰ added a dynamic type library to's core, making some common web related tasks easier to manage.

    πŸ”‹ Feature: πŸŽ‰πŸŽ‰πŸŽ‰ added native JSON support. JSON strings can be converted to fiobj_s * objects and fiobj_s * objects can be rendered as JSON! I'm hoping to get it benchmarked publicly.

  • v0.5.2 Changes

    πŸ”„ Change: non-breaking changes to the folder structure are also reflected in the updated makefile and .clang_complete.

    πŸ›  Fix: (defer) fixed SIGTERM handling (signal was mistakingly filtered away).

    πŸ›  Fix: (http_response) fixed http_response_sendfile2 where path concatenation occurred without a folder separator (/) and exclusively safe file paths were being ignored (the function assumed an unsafe path to be used, at least in part).

    πŸ›  Fix: minor fixes and documentation.

    πŸ›  Fix / Feature: (facil) sibling processes will now detect a sibling's death (caused by a crashed process) and shutdown.

    πŸ”‹ Feature: @benjcal suggested the script used to create new applications. The current version is a stand-in draft used for testing.

    πŸ”‹ Feature: temporary boiler plate code for a simple "hello world" HTTP application using the new application script (see the README). This is a temporary design to allow us to test the script's functionality and decide on the final boiler plate's design.