35163c3 introduced a new use of `mask` which makes the server
process uninterruptible while waiting for a new incoming request.
This change fixes that by surrounding the logic that waits for a
new request with `unmask`. This new `unmask` should still
respect the finalization guarantees of the surrounding masked
code.
A bunch of files have been missing from the tarballs created by `cabal
sdist`. I’ve changed the nix config to check for this and also found
some examples that I forgot to update in a previous PR (sorry about
that).
Previously, grpc-haskell used a lot of code in the form of
```
do x <- acquireResource
f x `finally` releaseResource x
```
This is not safe since you can get killed after acquiring the resource
but before installing the exception handler via `finally`. We have
seen various gRPC assertion errors and crashes on shutdown when this
got triggered.
Note that even though we can now build grpc-haskell and grpc-haskell-core
with modern tasty, the environment in which we built those test programs
did not support actually running all them successfully, due to the need to test
generated code in the context of the appropriate libraries. We do not yet
know whether test programs built with new versions of tasty would succeed
in the appropriate environment. In principle this could be discovered, but
the work involved is far from trivial, and therefore we defer it to another
time. Tests built with the old tasty still succeed.
It was not obvious from the type how many times the
final field of ClientReaderRequest would be invoked.
(Assuming it is invoked once per stream increment
results in a hang, which can be confusing.)
* Fix the output of the nixpkgs derivation
* Use the fixed-output sha256 hash for builtins.fetchTarball
This change makes the nixpkgs pin forwards compatible with Nix 1.12.x
and Nix 2.0.
* Correct the phrasing of the code comment
This is a "shallow" update, meaning that there are still several dependencies
(such as `grpc` or Haskell packages) that are still pinned and those pins might
not be necessary any longer after this change.
* Expose the max receive message length channel argument + unittest
* `ClientError` GADT ctor => `ClientErrorResponse`, expose `ClientError`
Prior to this commit, the name `ClientError` was both:
- The name of a data constructor name for the `ClientResult` GADT
- A name of an internal sum type for capturing different kinds of client
errors
We want to expose the latter to users of the library, and so expose the latter
and rename the former.
* Remove unused `MultiWayIf` lang ext
Instead of making a blocking foreign call without a timeout, we set a
timeout of one second. This way, the thread returns in Haskell code (and
thus is interruptible) at least every second. This is useful in order to
be able to kill `Server`s, see
https://github.com/awakesecurity/gRPC-haskell/issues/22.
* Make withServer provide the actual port
Again, useful to make a server listen on any available port by giving it
port zero (for testing).
* Re-introduce check on server port
* Add port field to Server
* Style: Remove unneeded newline
* Revert changes in tests
* Squash merge from branch `joel-fix-build-issues-and-broken-tests`
* Update `proto3-wire` and `proto3-suite` refs in `stack.yaml`
* Update `proto3-wire` and `proto3-suite` refs via `cabal2nix` for `nix` builds
* Remove `compile-proto-file` from the repo, as it is now available via `proto3-suite`
* Update `proto3-suite` ref in `stack.yaml`
* Update `proto3-suite` ref via `cabal2nix` for `nix` builds
* Update `proto3-suite` and `proto3-wire` gitrevs
* Regenerate Echo and Arithmetic example modules from their respective .protos
* Fix typo
We no longer require the `--with-gcc=clang` flag and it can cause
failed builds such as the one described in #19. I tested that the
`cabal` workflow works on OS X and NixOS without this flag