mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-09-29 15:22:08 +00:00
basetransform: Don't leak any output buffer if prepare_output_buffer
fails
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1291>
This commit is contained in:
parent
8f0b85df0b
commit
313116e60c
1 changed files with 9 additions and 0 deletions
|
@ -574,6 +574,13 @@ impl<T: BaseTransformImpl> BaseTransformImplExt for T {
|
||||||
PrepareOutputBufferSuccess::Buffer(from_glib_full(outbuf))
|
PrepareOutputBufferSuccess::Buffer(from_glib_full(outbuf))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.map_err(|err| {
|
||||||
|
if outbuf != buf as *mut _ {
|
||||||
|
drop(Option::<gst::Buffer>::from_glib_full(outbuf));
|
||||||
|
}
|
||||||
|
|
||||||
|
err
|
||||||
|
})
|
||||||
})
|
})
|
||||||
.unwrap_or(Err(gst::FlowError::NotSupported))
|
.unwrap_or(Err(gst::FlowError::NotSupported))
|
||||||
}
|
}
|
||||||
|
@ -1144,6 +1151,8 @@ unsafe extern "C" fn base_transform_prepare_output_buffer<T: BaseTransformImpl>(
|
||||||
true => InputBuffer::Writable(gst::BufferRef::from_mut_ptr(inbuf)),
|
true => InputBuffer::Writable(gst::BufferRef::from_mut_ptr(inbuf)),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*outbuf = ptr::null_mut();
|
||||||
|
|
||||||
gst::panic_to_error!(imp, gst::FlowReturn::Error, {
|
gst::panic_to_error!(imp, gst::FlowReturn::Error, {
|
||||||
match imp.prepare_output_buffer(buffer) {
|
match imp.prepare_output_buffer(buffer) {
|
||||||
Ok(PrepareOutputBufferSuccess::InputBuffer) => {
|
Ok(PrepareOutputBufferSuccess::InputBuffer) => {
|
||||||
|
|
Loading…
Reference in a new issue