mlt icon indicating copy to clipboard operation
mlt copied to clipboard

[TSAN] Data race steaming from mlt_profile_from_producer

Open alcinos opened this issue 5 years ago • 0 comments

I'm trying to catalog and fix (the best I can) the numerous data races in mlt. This one happens by simply running "melt video.mp4"

WARNING: ThreadSanitizer: data race (pid=344)
  Write of size 8 at 0x7b100000a840 by main thread (mutexes: write M2682):
    #0 free <null> (melt+0x6f54f)
    #1 buffer_replace /home/nicolas/Documents/Developpement/Projets/FFmpeg/libavutil/buffer.c:117:9 (libavutil.so.56+0x1877c)
    #2 av_buffer_unref /home/nicolas/Documents/Developpement/Projets/FFmpeg/libavutil/buffer.c:130:5 (libavutil.so.56+0x1877c)
    #3 mlt_frame_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_frame.c:620:11 (libmlt.so.6+0x27286)
    #4 filter_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/xine/filter_deinterlace.c:251:17 (libmltxine.so+0xfd1e)
    #5 mlt_frame_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_frame.c:620:11 (libmlt.so.6+0x27286)
    #6 get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/filter_fieldorder.c:33:14 (libmltcore.so+0x3f494)
    #7 mlt_frame_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_frame.c:620:11 (libmlt.so.6+0x27286)
    #8 filter_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/filter_crop.c:76:10 (libmltcore.so+0x3afe2)
    #9 mlt_frame_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_frame.c:620:11 (libmlt.so.6+0x27286)
    #10 filter_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/filter_rescale.c:221:3 (libmltcore.so+0x54eae)
    #11 mlt_frame_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_frame.c:620:11 (libmlt.so.6+0x27286)
    #12 filter_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/filter_resize.c:225:10 (libmltcore.so+0x5637b)
    #13 mlt_frame_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_frame.c:620:11 (libmlt.so.6+0x27286)
    #14 producer_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_tractor.c:371:2 (libmlt.so.6+0x996b6)
    #15 mlt_frame_get_image /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_frame.c:620:11 (libmlt.so.6+0x27286)
    #16 mlt_profile_from_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_profile.c:419:10 (libmlt.so.6+0xa2bac)
    #17 main /home/nicolas/Documents/Developpement/Projets/mlt/src/melt/melt.c:897:4 (melt+0xc62ea)

  Previous write of size 8 at 0x7b100000a840 by thread T2 (mutexes: write M3072):
    #0 posix_memalign <null> (melt+0x6546c)
    #1 av_malloc.localalias.1 /home/nicolas/Documents/Developpement/Projets/FFmpeg/libavutil/mem.c:87:9 (libavutil.so.56+0x2d75a)

  Mutex M2682 (0x7b6c00001380) created at:
    #0 pthread_mutex_init <null> (melt+0x5380b)
    #1 producer_open /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/avformat/producer_avformat.c:746:3 (libmltavformat.so+0x2298d)
    #2 producer_avformat_init /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/avformat/producer_avformat.c:202:10 (libmltavformat.so+0x21622)
    #3 create_service /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/avformat/factory.c:116:11 (libmltavformat.so+0x17c55)
    #4 mlt_repository_create /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_repository.c:245:35 (libmlt.so.6+0x9d549)
    #5 mlt_factory_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_factory.c:346:9 (libmlt.so.6+0x9b3d7)
    #6 create_from /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/producer_loader.c:57:15 (libmltcore.so+0x1f007)
    #7 create_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/producer_loader.c:123:14 (libmltcore.so+0x1dd0f)
    #8 producer_loader_init /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/producer_loader.c:220:14 (libmltcore.so+0x1d073)
    #9 mlt_repository_create /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_repository.c:245:35 (libmlt.so.6+0x9d549)
    #10 mlt_factory_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_factory.c:346:9 (libmlt.so.6+0x9b3d7)
    #11 create_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/producer_melt.c:80:24 (libmltcore.so+0x267ef)
    #12 producer_melt_init /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/core/producer_melt.c:434:15 (libmltcore.so+0x24f9a)
    #13 mlt_repository_create /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_repository.c:245:35 (libmlt.so.6+0x9d549)
    #14 mlt_factory_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_factory.c:346:9 (libmlt.so.6+0x9b3d7)
    #15 main /home/nicolas/Documents/Developpement/Projets/mlt/src/melt/melt.c:890:10 (melt+0xc6191)

  Mutex M3072 (0x7b8000002258) created at:
    #0 pthread_mutex_init <null> (melt+0x5380b)
    #1 ff_frame_thread_init /home/nicolas/Documents/Developpement/Projets/FFmpeg/libavcodec/pthread_frame.c:771:9 (libavcodec.so.58+0x5a9649)
    #2 producer_set_up_video /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/avformat/producer_avformat.c:2277:32 (libmltavformat.so+0x2d805)
    #3 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/avformat/producer_avformat.c:2960:2 (libmltavformat.so+0x22674)
    #4 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #5 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #6 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:698:12 (libmlt.so.6+0x64827)
    #7 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #8 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_playlist.c:2102:3 (libmlt.so.6+0x701ae)
    #9 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #10 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #11 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_multitrack.c:612:3 (libmlt.so.6+0x6b719)
    #12 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #13 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #14 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_tractor.c:520:5 (libmlt.so.6+0x95836)
    #15 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #16 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #17 mlt_profile_from_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_profile.c:414:9 (libmlt.so.6+0xa2ac0)
    #18 main /home/nicolas/Documents/Developpement/Projets/mlt/src/melt/melt.c:897:4 (melt+0xc62ea)

  Thread T2 (tid=347, running) created by main thread at:
    #0 pthread_create <null> (melt+0x535f7)
    #1 ff_frame_thread_init /home/nicolas/Documents/Developpement/Projets/FFmpeg/libavcodec/pthread_frame.c:828:15 (libavcodec.so.58+0x5a9601)
    #2 producer_set_up_video /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/avformat/producer_avformat.c:2277:32 (libmltavformat.so+0x2d805)
    #3 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/modules/avformat/producer_avformat.c:2960:2 (libmltavformat.so+0x22674)
    #4 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #5 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #6 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:698:12 (libmlt.so.6+0x64827)
    #7 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #8 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_playlist.c:2102:3 (libmlt.so.6+0x701ae)
    #9 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #10 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #11 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_multitrack.c:612:3 (libmlt.so.6+0x6b719)
    #12 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #13 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #14 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_tractor.c:520:5 (libmlt.so.6+0x95836)
    #15 producer_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_producer.c:647:13 (libmlt.so.6+0x6437d)
    #16 mlt_service_get_frame /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_service.c:593:12 (libmlt.so.6+0x6046b)
    #17 mlt_profile_from_producer /home/nicolas/Documents/Developpement/Projets/mlt/src/framework/mlt_profile.c:414:9 (libmlt.so.6+0xa2ac0)
    #18 main /home/nicolas/Documents/Developpement/Projets/mlt/src/melt/melt.c:897:4 (melt+0xc62ea)

SUMMARY: ThreadSanitizer: data race (/usr/local/bin/melt+0x6f54f) in __interceptor_free
==================

Both mlt and libav* are compiled with debug symbols and clang's Thread Sanitizer.

In this particular case, I'm stuck for now since the backtrace of the concurrent write is too shallow. I managed to get a better backtrace for the first write:

#11 0x0000556895c5a56d in free ()
#12 0x00007fd136fb2815 in av_free (ptr=<optimized out>) at libavutil/mem.c:223
#13 0x00007fd136fb2902 in av_freep (arg=<optimized out>) at libavutil/mem.c:233
#14 0x00007fd136f9d77d in buffer_replace (src=0x0, dst=0x7b5400001390) at libavutil/buffer.c:117
#15 0x00007fd136f9d77d in av_buffer_unref (buf=buf@entry=0x7b5400001390) at libavutil/buffer.c:130
#16 0x00007fd134df89d6 in decode_receive_frame_internal (avctx=avctx@entry=0x7b6400032f00, frame=0x7b5400001180) at libavcodec/decode.c:672
#17 0x00007fd134df9750 in avcodec_send_packet (avctx=avctx@entry=0x7b6400032f00, avpkt=avpkt@entry=0x7b6c00000f38) at libavcodec/decode.c:705
#18 0x00007fd134dfbca3 in compat_decode (avctx=0x7b6400032f00, frame=0x7b5400039080, got_frame=0x7ffda744187c, pkt=0x7b6c00000f38) at libavcodec/decode.c:841
#19 0x00007fd1371a5aa1 in producer_get_image (frame=0x7b1800003600, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at producer_avformat.c:1790
#20 0x00007fd1389cb287 in mlt_frame_get_image (self=0x7b1800003600, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at mlt_frame.c:620
#21 0x00007fd1283a3d1f in filter_get_image (frame=0x7b1800003600, image=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at filter_deinterlace.c:251
#22 0x00007fd1389cb287 in mlt_frame_get_image (self=0x7b1800003600, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at mlt_frame.c:620
#23 0x00007fd130baf495 in get_image (frame=0x7b1800003600, image=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at filter_fieldorder.c:33
#24 0x00007fd1389cb287 in mlt_frame_get_image (self=0x7b1800003600, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at mlt_frame.c:620
#25 0x00007fd130baafe3 in filter_get_image (frame=0x7b1800003600, image=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at filter_crop.c:76
#26 0x00007fd1389cb287 in mlt_frame_get_image (self=0x7b1800003600, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7442f94, height=0x7ffda7442f90, writable=0) at mlt_frame.c:620
#27 0x00007fd130bc4eaf in filter_get_image (frame=0x7b1800003600, image=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7443eb8, height=0x7ffda7443eb4, writable=0) at filter_rescale.c:221
#28 0x00007fd1389cb287 in mlt_frame_get_image (self=0x7b1800003600, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7443eb8, height=0x7ffda7443eb4, writable=0) at mlt_frame.c:620
#29 0x00007fd130bc637c in filter_get_image (frame=0x7b1800003600, image=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7443eb8, height=0x7ffda7443eb4, writable=0) at filter_resize.c:225
#30 0x00007fd1389cb287 in mlt_frame_get_image (self=0x7b1800003600, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7443eb8, height=0x7ffda7443eb4, writable=0) at mlt_frame.c:620
#31 0x00007fd138a3d6b7 in producer_get_image (self=0x7b18000035a0, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7443eb8, height=0x7ffda7443eb4, writable=0) at mlt_tractor.c:371
#32 0x00007fd1389cb287 in mlt_frame_get_image (self=0x7b18000035a0, buffer=0x7ffda7443ec0, format=0x7ffda7443ebc, width=0x7ffda7443eb8, height=0x7ffda7443eb4, writable=0) at mlt_frame.c:620
#33 0x00007fd138a46bad in mlt_profile_from_producer (profile=0x7b1000001000, producer=0x7b200003ac80) at mlt_profile.c:419
#34 0x0000556895cb12eb in main (argc=2, argv=0x7ffda7444828) at melt.c:897

If anyone has ideas on how to debug further, I'm all ears.

alcinos avatar Apr 25 '19 01:04 alcinos