signal-call-tunnel creates PulseAudio module-null-sink and
module-remap-source modules via virtual_audio.sh and relies on
VirtualAudioDevicePair::drop() to unload them on exit. However,
the tunnel is terminated with SIGTERM (Process.destroy()), and Rust
Drop implementations do not run on signal termination, so the modules
are never unloaded and accumulate across calls.
Fix: run teardown in the process.onExit() callback, after the tunnel
has exited, by calling pactl list modules short and unloading any
module whose arguments contain the stored inputDeviceName or
outputDeviceName for the call.
Without an initial flush(), the JVM HttpServer buffers all
output until the first flush() in the 15-second keep-alive loop.
Clients with shorter timeouts (e.g. 10 s) abort before receiving
any data.
Add a flush() call directly after creating ServerSentEventSender,
before the wait loop, so the HTTP 200 response and headers reach the
client immediately upon connection.
Adds regression test SseInitialFlushTest that verifies at least one
byte arrives within 2 seconds of connecting to GET /api/v1/events.
When filling or updating a V2 group, profile keys were copied from
DecryptedGroup.members into the local profile store but not from
requestingMembers. Admins who never had a prior session with a user in
the join queue then lacked profile keys and could not decrypt profiles
(e.g. for listContacts).
Also process DecryptedRequestingMember entries the same way as full
members, using DecryptedMember / DecryptedRequestingMember types so the
lib module does not require a direct protobuf dependency.
Made-with: Cursor