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
@ -14,7 +14,7 @@ import javax.annotation.Nullable;
|
||||
|
||||
/** Java wrapper for a C++ RtpSenderInterface. */
|
||||
public class RtpSender {
|
||||
final long nativeRtpSender;
|
||||
private long nativeRtpSender;
|
||||
|
||||
@Nullable private MediaStreamTrack cachedTrack;
|
||||
private boolean ownsTrack = true;
|
||||
@ -45,7 +45,8 @@ public class RtpSender {
|
||||
* @return true on success and false on failure.
|
||||
*/
|
||||
public boolean setTrack(@Nullable MediaStreamTrack track, boolean takeOwnership) {
|
||||
if (!nativeSetTrack(nativeRtpSender, (track == null) ? 0 : track.nativeTrack)) {
|
||||
checkRtpSenderExists();
|
||||
if (!nativeSetTrack(nativeRtpSender, (track == null) ? 0 : track.getNativeMediaStreamTrack())) {
|
||||
return false;
|
||||
}
|
||||
if (cachedTrack != null && ownsTrack) {
|
||||
@ -62,14 +63,17 @@ public class RtpSender {
|
||||
}
|
||||
|
||||
public boolean setParameters(RtpParameters parameters) {
|
||||
checkRtpSenderExists();
|
||||
return nativeSetParameters(nativeRtpSender, parameters);
|
||||
}
|
||||
|
||||
public RtpParameters getParameters() {
|
||||
checkRtpSenderExists();
|
||||
return nativeGetParameters(nativeRtpSender);
|
||||
}
|
||||
|
||||
public String id() {
|
||||
checkRtpSenderExists();
|
||||
return nativeGetId(nativeRtpSender);
|
||||
}
|
||||
|
||||
@ -79,10 +83,12 @@ public class RtpSender {
|
||||
}
|
||||
|
||||
public void setFrameEncryptor(FrameEncryptor frameEncryptor) {
|
||||
checkRtpSenderExists();
|
||||
nativeSetFrameEncryptor(nativeRtpSender, frameEncryptor.getNativeFrameEncryptor());
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
checkRtpSenderExists();
|
||||
if (dtmfSender != null) {
|
||||
dtmfSender.dispose();
|
||||
}
|
||||
@ -90,6 +96,19 @@ public class RtpSender {
|
||||
cachedTrack.dispose();
|
||||
}
|
||||
JniCommon.nativeReleaseRef(nativeRtpSender);
|
||||
nativeRtpSender = 0;
|
||||
}
|
||||
|
||||
/** Returns a pointer to webrtc::RtpSenderInterface. */
|
||||
long getNativeRtpSender() {
|
||||
checkRtpSenderExists();
|
||||
return nativeRtpSender;
|
||||
}
|
||||
|
||||
private void checkRtpSenderExists() {
|
||||
if (nativeRtpSender == 0) {
|
||||
throw new IllegalStateException("RtpSender has been disposed.");
|
||||
}
|
||||
}
|
||||
|
||||
private static native boolean nativeSetTrack(long rtpSender, long nativeTrack);
|
||||
|
||||
Reference in New Issue
Block a user