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. Thefio_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 facil.io 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, wheregcc
would complain about overwriting thefio_cstr_s
struct due toconst
members. Credit to @vit1251 for exposing this issue.π Fix: (
fiobj
) fixed NULL pointer testing forfiobj_free(NULL)
.Compatibility: (
gcc-6
) Fix some compatibility concerns withgcc
version 6, as well as some warnings that were exposed when testing withgcc
.Optimization: (
fiobj
) optimized the JSON parsing memory allocations as well as fixed some of the function declarations to add theconst
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 aswitch
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 thefacil.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 longon_open
processing times. This was fixed by fragmenting theupgrade
event into two events, adding thefacil_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 theon_open
callbacks.π Fix: (
sock
) sockets created using the TCP/IPsock
library now useTCP_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 aread
loop to allow for mid-stream / mid-processing protocol upgrades. This also fixes #16 at it's root (besides the improvedwebsocket
callback handling).π Fix: (
http1
) HTTP/1.x now correctly initializes theudata
pointer to NULL fore each new request.π Fix: (
facil
) thefacil_run_every
function now correctly calls theon_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 indefer_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 afterevio_close
was called, causing some functions to believe that events are still processed. Now theevio_isactive
will correctly indicate that the evented IO is inactive afterevio_close
was called.π Fix: (
evio
) fixes an issue whereevio_add_timer
would fail withEEXIST
instead of reporting success (this might be related to timer consolidation concerns in the Linux kernel).π Fix: (
evio
) better timerfd
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 forgcc
/Linux (I was usingclang
, 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
facil.io
'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 andfiobj_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
) fixedSIGTERM
handling (signal was mistakingly filtered away).π Fix: (
http_response
) fixedhttp_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.