]> git.sesse.net Git - ffmpeg/commitdiff
Revert "Acquire lock when initializing parsers."
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 6 Dec 2012 00:35:44 +0000 (01:35 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 6 Dec 2012 01:52:46 +0000 (02:52 +0100)
This reverts commit 7feef7dbca5f6a816e04b63c17aad5dacd272f6e.

This commit causes assertion failures due to use of parser_init from multiple
threads, for example indirectly by ffmpeg.c and more directly from the
packet read functions.

I dont know how to fix this quickly, and fixing ffmpeg.c leaves
the possibility of other applications being affected.
Crashing the applications until this is resolved is clearly no good
thus this revert, so we have time to think about the problem.

Crashes can be reproduced by using multiple input files in ffmpeg.

libavcodec/parser.c

index e2a6f082c85334349b3ead347ad3f00dcae5295a..2e204e2c2a6ad65afd0c06b2a01597efdc1b7aee 100644 (file)
@@ -23,7 +23,6 @@
 #include <string.h>
 
 #include "parser.h"
-#include "internal.h"
 #include "libavutil/mem.h"
 
 static AVCodecParser *av_first_parser = NULL;
@@ -68,10 +67,7 @@ AVCodecParserContext *av_parser_init(int codec_id)
     s->fetch_timestamp=1;
     s->pict_type = AV_PICTURE_TYPE_I;
     if (parser->parser_init) {
-        if (ff_lock_avcodec(NULL) < 0)
-            goto err_out;
         ret = parser->parser_init(s);
-        ff_unlock_avcodec();
         if (ret != 0)
             goto err_out;
     }
@@ -206,11 +202,8 @@ int av_parser_change(AVCodecParserContext *s,
 void av_parser_close(AVCodecParserContext *s)
 {
     if(s){
-        if (s->parser->parser_close) {
-            ff_lock_avcodec(NULL);
+        if (s->parser->parser_close)
             s->parser->parser_close(s);
-            ff_unlock_avcodec();
-        }
         av_free(s->priv_data);
         av_free(s);
     }