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:
committed by
Commit Bot
parent
dca5a2ca73
commit
ee05e90297
@ -22,7 +22,7 @@ public class RtpReceiver {
|
||||
public void onFirstPacketReceived(MediaStreamTrack.MediaType media_type);
|
||||
}
|
||||
|
||||
final long nativeRtpReceiver;
|
||||
private long nativeRtpReceiver;
|
||||
private long nativeObserver;
|
||||
|
||||
@Nullable private MediaStreamTrack cachedTrack;
|
||||
@ -40,28 +40,34 @@ public class RtpReceiver {
|
||||
}
|
||||
|
||||
public boolean setParameters(@Nullable RtpParameters parameters) {
|
||||
checkRtpReceiverExists();
|
||||
return parameters == null ? false : nativeSetParameters(nativeRtpReceiver, parameters);
|
||||
}
|
||||
|
||||
public RtpParameters getParameters() {
|
||||
checkRtpReceiverExists();
|
||||
return nativeGetParameters(nativeRtpReceiver);
|
||||
}
|
||||
|
||||
public String id() {
|
||||
checkRtpReceiverExists();
|
||||
return nativeGetId(nativeRtpReceiver);
|
||||
}
|
||||
|
||||
@CalledByNative
|
||||
public void dispose() {
|
||||
checkRtpReceiverExists();
|
||||
cachedTrack.dispose();
|
||||
if (nativeObserver != 0) {
|
||||
nativeUnsetObserver(nativeRtpReceiver, nativeObserver);
|
||||
nativeObserver = 0;
|
||||
}
|
||||
JniCommon.nativeReleaseRef(nativeRtpReceiver);
|
||||
nativeRtpReceiver = 0;
|
||||
}
|
||||
|
||||
public void SetObserver(Observer observer) {
|
||||
checkRtpReceiverExists();
|
||||
// Unset the existing one before setting a new one.
|
||||
if (nativeObserver != 0) {
|
||||
nativeUnsetObserver(nativeRtpReceiver, nativeObserver);
|
||||
@ -70,9 +76,16 @@ public class RtpReceiver {
|
||||
}
|
||||
|
||||
public void setFrameDecryptor(FrameDecryptor frameDecryptor) {
|
||||
checkRtpReceiverExists();
|
||||
nativeSetFrameDecryptor(nativeRtpReceiver, frameDecryptor.getNativeFrameDecryptor());
|
||||
}
|
||||
|
||||
private void checkRtpReceiverExists() {
|
||||
if (nativeRtpReceiver == 0) {
|
||||
throw new IllegalStateException("RtpReceiver has been disposed.");
|
||||
}
|
||||
}
|
||||
|
||||
// This should increment the reference count of the track.
|
||||
// Will be released in dispose().
|
||||
private static native long nativeGetTrack(long rtpReceiver);
|
||||
|
||||
Reference in New Issue
Block a user