On 30/09/14 08:30, Anton Khirnov wrote:
Quoting Luca Barbato (2014-09-30 02:00:50)
From: Manfred Georg <[email protected]>
A badly behaving user provided mutex manager (such as that in OpenCV)
may not reset the mutex to NULL on destruction.
This can cause a problem for a later mutex manager
(which may assert that the mutex is NULL before creating).
Signed-off-by: Manfred Georg <[email protected]>
Signed-off-by: Luca Barbato <[email protected]>
---
Review in patch form:
* We normally use ret for keeping the return value
* We tend to align =
libavcodec/utils.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index a472076..204d80b 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -2317,19 +2317,25 @@ AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel)
int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op))
{
+ int ret;
+
if (lockmgr_cb) {
- if (lockmgr_cb(&codec_mutex, AV_LOCK_DESTROY))
- return -1;
- if (lockmgr_cb(&avformat_mutex, AV_LOCK_DESTROY))
+ void *old_codec_mutex = codec_mutex;
+ void *old_avformat_mutex = avformat_mutex;
+
+ codec_mutex = NULL;
+ avformat_mutex = NULL;
+
+ ret = lockmgr_cb(&old_codec_mutex, AV_LOCK_DESTROY);
+ if (lockmgr_cb(&old_avformat_mutex, AV_LOCK_DESTROY) || ret)
return -1;
}
lockmgr_cb = cb;
if (lockmgr_cb) {
- if (lockmgr_cb(&codec_mutex, AV_LOCK_CREATE))
- return -1;
- if (lockmgr_cb(&avformat_mutex, AV_LOCK_CREATE))
+ ret = lockmgr_cb(&codec_mutex, AV_LOCK_CREATE);
+ if (lockmgr_cb(&avformat_mutex, AV_LOCK_CREATE) || ret)
What's the point of creating the lavf lock, if the lavc one failed? The
current code does not do that.
Me blindly matching the lines above and the original author doing the
same I guess.
I'd switch it to if (ret || lockmgr_cb()) and accept it, it does improve
a bit the situation IMHO.
lu
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel