From: Dave Airlie <airl...@redhat.com> Coverity pointed out we never dropped the lock here, so fix it by using a common exit path.
Signed-off-by: Dave Airlie <airl...@redhat.com> --- src/gallium/state_trackers/vdpau/mixer.c | 38 ++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c index a724aa5..4118eb8 100644 --- a/src/gallium/state_trackers/vdpau/mixer.c +++ b/src/gallium/state_trackers/vdpau/mixer.c @@ -643,6 +643,7 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, const float *vdp_csc; float val; unsigned i; + VdpStatus ret; if (!(attributes && attribute_values)) return VDP_STATUS_INVALID_POINTER; @@ -676,8 +677,10 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, case VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL: val = *(float*)attribute_values[i]; - if (val < 0.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < 0.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->noise_reduction.level = val * 10; vlVdpVideoMixerUpdateNoiseReductionFilter(vmixer); @@ -685,41 +688,52 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA: val = *(float*)attribute_values[i]; - if (val < 0.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < 0.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->luma_key_min = val; break; case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MAX_LUMA: val = *(float*)attribute_values[i]; - if (val < 0.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < 0.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->luma_key_max = val; break; case VDP_VIDEO_MIXER_ATTRIBUTE_SHARPNESS_LEVEL: val = *(float*)attribute_values[i]; - if (val < -1.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < -1.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->sharpness.value = val; vlVdpVideoMixerUpdateSharpnessFilter(vmixer); break; case VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE: - if (*(uint8_t*)attribute_values[i] > 1) - return VDP_STATUS_INVALID_VALUE; + if (*(uint8_t*)attribute_values[i] > 1) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->skip_chroma_deint = *(uint8_t*)attribute_values[i]; vlVdpVideoMixerUpdateDeinterlaceFilter(vmixer); break; default: - pipe_mutex_unlock(vmixer->device->mutex); - return VDP_STATUS_INVALID_VIDEO_MIXER_ATTRIBUTE; + ret = VDP_STATUS_INVALID_VIDEO_MIXER_ATTRIBUTE; + goto fail; } } pipe_mutex_unlock(vmixer->device->mutex); return VDP_STATUS_OK; +fail: + pipe_mutex_unlock(vmixer->device->mutex); + return ret; } /** -- 1.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev