Keep voice cleanup independent of caller cancellation and stop playback promptly
This commit is contained in:
1 parent
48a20cda8c
commit
d0d63c1d4b
2 files changed
+3
-2
No files matched your search
@@ -241,10 +241,10 @@ class AudioRecorderManager {
|
||||
while (true) {
|
||||
val previous = closing.get()
|
||||
if (previous != null && !previous.isDone) return previous
|
||||
val next = CompletableFuture<Unit>()
|
||||
val next = object : CompletableFuture<Unit>() { override fun cancel(mayInterruptIfRunning: Boolean): Boolean = false }
|
||||
if (closing.compareAndSet(previous, next)) { result = next; break }
|
||||
}
|
||||
captureRunning = false; recordingThread?.interrupt()
|
||||
captureRunning = false; recordingThread?.interrupt(); stopPlayback()
|
||||
try {
|
||||
Thread({
|
||||
var retryMs = 250L
|
||||
|
||||
+1
@@ -185,6 +185,7 @@ class AudioRecorderManagerTest {
|
||||
val device = plan(); assertTrue(manager.startRecording("7")); device.failures = setOf("release")
|
||||
val closed = manager.requestClose()
|
||||
waitUntil { NativeLib.cancels.get() == 1 }
|
||||
assertFalse(closed.cancel(true))
|
||||
assertFalse(closed.isDone); assertFalse(NativeLib.active)
|
||||
assertThrows(IllegalStateException::class.java) { AudioRecorderManager.requireReleasedForCore() }
|
||||
device.failures = emptySet(); closed.get(2, TimeUnit.SECONDS)
|
||||
|
||||
Reference in new issue
Block a user