The real changes are only on the doRespond path.
There are some changes in purge, but the behavior should not change there: the documentation was saying that were discarding the calls, but the implementation was closing the connection. It's not really safe to do something different anyway: imagine a half-replied call, you can't discard it.
for the doRespond, instead of locking when we wanted to add a call to the list, we lock only if we want to write on the channel. We also to a tryLock to return immediately, so the handler does not wait.
The test are still running here (I've done multiple versions, the previous versions were ok, but...). I haven't yet ran the perf tests. It targets the scenario with multiple clients on the same connection. It's more or less a first step for having more Responders (depending on the test results). I will do another deep review, but I wanted to show what I was working on.