packages feed

ngx-export-1.7.3: Changelog.md

### 1.7.3

- Further fixes for inactive shared services waiting on file-locks.

### 1.7.2

- More robust masking in async handlers. As this uses function *interruptible*
  from module *Control.Exception*, support of GHC versions *7.x* was dropped.
- Fixed waiting on file-locks of inactive shared services.

### 1.7.1

- Added function *ngxCachedPid* to return the PID of the current worker process
  cached in Nginx.

### 1.7.0

- Now basic synchronous and all asynchronous content handlers are expected to
  return a list of custom response headers in the *4th* field of the
  *ContentHandlerResult*.
- All asynchronous handlers get proper masking against asynchronous exceptions,
  which is especially important for service handlers in presence of asynchronous
  exceptions from service hooks.
- Now a new StablePtr for the content type gets returned only when its value is
  not empty.

### 1.6.4

- Added exception *WorkerProcessIsExiting* to signal services that Nginx is
  shutting down. This has replaced *ThreadKilled* that was used formerly in
  order to prevent erroneous handling of unexpectedly thrown *ThreadKilled*.
- All API exceptions now derive *Eq*.

### 1.6.3

- Added API exceptions *RestartWorkerProcess* and *FinalizeHTTPRequest*.

### 1.6.2

- Added exception *TerminateWorkerProcess* that can be used for a little bit
  more graceful termination of the worker process than bare exit(2).

### 1.6.1

- Upgraded Cabal version constraint.

### 1.6.0

- Implemented type and role disambiguation helper to prevent segfaults in
  Nginx when a handler of an appropriate type (say, IOYY with a role of a
  synchronous handler) gets used in a wrong role (say, as an async handler).

### 1.5.0

- Services are now terminated with *cancelWith ThreadKilled* because *cancel*
  throws *AsyncCancelled* starting from *async-2.2*.

### 1.4.2

- Minor internal improvements (using tuple sections).

### 1.4.1

- Corrected type of *ngxCachedTimePtr*.

### 1.4.0

- Added a number of opaque pointers to Nginx global objects for using them in
  C plugins.

### 1.3.0

- Export function *ngxExportInstallSignalHandler* to ignore SIGINT.

### 1.2.2

- Returning a special error code (*2*) on exception *ServiceHookInterrupt*.

### 1.2.1

- Bugfix: put *unsigned* integers in event channels (important for *eventfd*).

### 1.2.0

- Added exporter *ngxExportServiceHook* for service hooks and exception
  *ServiceHookInterrupt* for interrupting services.

### 1.1.0

- Added an asynchronous content handler with direct access to request body
  chunks exported with *ngxExportAsyncHandlerOnReqBody*.
- Reading buffered request body from a temporary file when it's provided.

### 1.0.1

- Using deepseq for really deep evaluation of resulting lazy bytestrings to
  prevent leaks of exceptions outside of protected code.

### 1.0

- Added an asynchronous content handler exported with *ngxExportAsyncHandler*.
- Content type in all content handlers gets packed in a strict bytestring now,
  which allows for using static strings without dynamic memory allocation.
- Package stability tag was promoted to stable.

### 0.9.1.1

- yY handler must be strict against exceptions in safeYYHandler.

### 0.9.1.0

- Do not write into service event channel when Nginx is exiting.

### 0.9.0.0

- Using interruptible FFI for safeWaitToSetLock to re-enable graceful shutdown
  with hs_exit() for shared services.

### 0.8.1.0

- Function waitSetToLock from package *unix* calls C fcntl() unsafely which
  caused hangs of the whole haskell RTS when it was waiting for lock release.
  So this functions was reimplemented using *safe* semantics as
  safeWaitToSetLock.
- Exported function ngxExportReleaseLockedByteString was removed because Nginx
  can call hs_free_stable_ptr() directly.

### 0.8.0.3

- A better solution for ghc warnings set.

### 0.8.0.2

- Removed constraint on *template-haskell* via a CPP macro (this should repair
  compilation for *ghc-7.10*).

### 0.8.0.0

- Implemented shared services using waitToSetLock to get exclusive access for
  servicing.
- New dependency on package *monad-loops* (>= 0.4.2).

### 0.7.0.0

Further optimizations.

- Poke single-chunked lazy bytestrings directly into passed from Nginx buffers.
- Specialize polymorphic functions and inline trivial functions.

### 0.6.1.1

- Added *-Wno-incomplete-patterns* in *ghc-options* for older ghc versions.

### 0.6.1.0

- Constructors of *NgxExport* were lifted to type level for all handlers to
  mitigate warnings on incomplete patterns.
- *COMPLETE* pragmas for pattern synonyms were added for the same reason.
- Other warnings were fixed too. Now the module builds with *ghc-options*
  *-Wall -Wno-unrecognised-pragmas*.

### 0.6.0.0

- Lazy bytestrings contents are no longer copied when passed back to Nginx.
  Instead, they are passed directly along with a StablePtr to original
  bytestrings. This must improve performance and lower memory consumption for
  content handlers with large outputs.

### 0.5.0.0

- All synchronous variable and content handlers were made exception safe.
- Bugfix: evaluate results of IO handlers strictly to make sure that all
  exceptions will be caught.

### 0.4.1.0

- Bugfix: keep calling *fdWriteBuf* until it writes complete buffer.

### 0.4.0.0

- All asynchronous handlers can now report events via eventfd channels.
- New dependency on package *binary* (>= 0.8.1.0).

### 0.3.2.2

- Stricter constraints for packages *base* (>= 4.8 && < 5) and
  *template-haskell* (>= 2.11.0.0).

### 0.3.2.0

- Versioning security: get number of required version parts from C code.

### 0.3.1.0

- Added versioning support to test for compatibility in C code.

### 0.3.0.0

- Added an asynchronous client request body handler exported with
  *ngxExportAsyncOnReqBody* for using in a new Nginx directive
  *haskell_run_async_on_request_body*.

### 0.2.5.1

- Added signatures for type-checkers and exporters to prevent warnings when
  reifying in a user code with *-Wmissing-signatures* or *-Wall* enabled.

### 0.2.5.0

- Added a synchronous handler in IO Monad exported with *ngxExportIOYY*.