Throw IllegalStateException if native objects are used after dispose.
This makes it easier to debug issues related to double dispose /
use after dispose.
Bug: webrtc:7566, webrtc:8297
Change-Id: I07429b2b794deabb62b5f3ea1cf92eea6f66a149
Reviewed-on: https://webrtc-review.googlesource.com/102540
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Paulina Hensman <phensman@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24894}
diff --git a/sdk/android/api/org/webrtc/VideoTrack.java b/sdk/android/api/org/webrtc/VideoTrack.java
index 5495ee8..5e33e1e 100644
--- a/sdk/android/api/org/webrtc/VideoTrack.java
+++ b/sdk/android/api/org/webrtc/VideoTrack.java
@@ -10,8 +10,8 @@
package org.webrtc;
-import java.util.IdentityHashMap;
import java.util.ArrayList;
+import java.util.IdentityHashMap;
import java.util.List;
/** Java version of VideoTrackInterface. */
@@ -39,7 +39,7 @@
if (!sinks.containsKey(sink)) {
final long nativeSink = nativeWrapSink(sink);
sinks.put(sink, nativeSink);
- nativeAddSink(nativeTrack, nativeSink);
+ nativeAddSink(getNativeMediaStreamTrack(), nativeSink);
}
}
@@ -51,7 +51,7 @@
public void removeSink(VideoSink sink) {
final Long nativeSink = sinks.remove(sink);
if (nativeSink != null) {
- nativeRemoveSink(nativeTrack, nativeSink);
+ nativeRemoveSink(getNativeMediaStreamTrack(), nativeSink);
nativeFreeSink(nativeSink);
}
}
@@ -59,13 +59,18 @@
@Override
public void dispose() {
for (long nativeSink : sinks.values()) {
- nativeRemoveSink(nativeTrack, nativeSink);
+ nativeRemoveSink(getNativeMediaStreamTrack(), nativeSink);
nativeFreeSink(nativeSink);
}
sinks.clear();
super.dispose();
}
+ /** Returns a pointer to webrtc::VideoTrackInterface. */
+ long getNativeVideoTrack() {
+ return getNativeMediaStreamTrack();
+ }
+
private static native void nativeAddSink(long track, long nativeSink);
private static native void nativeRemoveSink(long track, long nativeSink);
private static native long nativeWrapSink(VideoSink sink);