From fe5ef5bde92ec5de31d95268becb837b034aad3d Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Sat, 26 Oct 2019 14:21:27 +0300 Subject: [PATCH] Fix potential memory leak in video player sample. --- .../src/videoPlayerMain/kotlin/DecoderWorker.kt | 2 +- .../videoplayer/src/videoPlayerMain/kotlin/SDLAudio.kt | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/samples/videoplayer/src/videoPlayerMain/kotlin/DecoderWorker.kt b/samples/videoplayer/src/videoPlayerMain/kotlin/DecoderWorker.kt index ffd0acba133..339a1686f06 100644 --- a/samples/videoplayer/src/videoPlayerMain/kotlin/DecoderWorker.kt +++ b/samples/videoplayer/src/videoPlayerMain/kotlin/DecoderWorker.kt @@ -316,7 +316,7 @@ private class Decoder( fun audioVideoSynced() = (audio?.isSynced() ?: true) || done() } -class DecoderWorker(val worker: Worker) : Disposable { +inline class DecoderWorker(val worker: Worker) : Disposable { // This class must have no other state, but this worker object. // All the real state must be stored on the worker's side. constructor() : this(Worker.start()) diff --git a/samples/videoplayer/src/videoPlayerMain/kotlin/SDLAudio.kt b/samples/videoplayer/src/videoPlayerMain/kotlin/SDLAudio.kt index b15358d8dcc..b06bae5a673 100644 --- a/samples/videoplayer/src/videoPlayerMain/kotlin/SDLAudio.kt +++ b/samples/videoplayer/src/videoPlayerMain/kotlin/SDLAudio.kt @@ -65,15 +65,10 @@ class SDLAudio(val player: VideoPlayer) : DisposableContainer() { } } -// Only set in the audio thread -@ThreadLocal -private var decoder: DecoderWorker? = null - private fun audioCallback(userdata: COpaquePointer?, buffer: CPointer?, length: Int) { // This handler will be invoked in the audio thread, so reinit runtime. kotlin.native.initRuntimeIfNeeded() - val decoder = decoder ?: - DecoderWorker(Worker.fromCPointer(userdata)).also { decoder = it } + val decoder = DecoderWorker(Worker.fromCPointer(userdata)) var outPosition = 0 while (outPosition < length) { val frame = decoder.nextAudioFrame(length - outPosition) @@ -88,4 +83,4 @@ private fun audioCallback(userdata: COpaquePointer?, buffer: CPointer? break } } -} \ No newline at end of file +}