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}
This commit is contained in:
Sami Kalliomäki
2018-09-28 14:38:21 +02:00
committed by Commit Bot
parent dca5a2ca73
commit ee05e90297
15 changed files with 213 additions and 35 deletions

View File

@ -70,34 +70,52 @@ public class MediaStreamTrack {
}
}
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);