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/MediaStreamTrack.java b/sdk/android/api/org/webrtc/MediaStreamTrack.java
index 198da1e..944c7ef 100644
--- a/sdk/android/api/org/webrtc/MediaStreamTrack.java
+++ b/sdk/android/api/org/webrtc/MediaStreamTrack.java
@@ -70,34 +70,52 @@
}
}
- final long nativeTrack;
+ private long nativeTrack;
public MediaStreamTrack(long nativeTrack) {
this.nativeTrack = nativeTrack;
}
public String id() {
+ checkMediaStreamTrackExists();
return nativeGetId(nativeTrack);
}
public String kind() {
+ checkMediaStreamTrackExists();
return nativeGetKind(nativeTrack);
}
public boolean enabled() {
+ checkMediaStreamTrackExists();
return nativeGetEnabled(nativeTrack);
}
public boolean setEnabled(boolean enable) {
+ checkMediaStreamTrackExists();
return nativeSetEnabled(nativeTrack, enable);
}
public State state() {
+ checkMediaStreamTrackExists();
return nativeGetState(nativeTrack);
}
public void dispose() {
+ checkMediaStreamTrackExists();
JniCommon.nativeReleaseRef(nativeTrack);
+ nativeTrack = 0;
+ }
+
+ long getNativeMediaStreamTrack() {
+ checkMediaStreamTrackExists();
+ return nativeTrack;
+ }
+
+ private void checkMediaStreamTrackExists() {
+ if (nativeTrack == 0) {
+ throw new IllegalStateException("MediaStreamTrack has been disposed.");
+ }
}
private static native String nativeGetId(long track);