Commits on Source (5)
-
`module_unneed` is now called in one single place.
357c70f1 -
Now, this function only interrupts and join the encoder threads.
d899a2d3 -
Single `module_unneed` calls aren't enough to properly close encoders as their disable callbacks are stored independently from the module. As a side effect, this patch fixes a double-free where the custom `close` callback was called after the `module_unneed` call in the encoder destroy function: ``` READ of size 8 at 0x619000050498 thread T10 (vlc-input) #0 0x7f83c0e72a67 in CloseEncoder ../../modules/codec/x264.c:1523 #1 0x7f83d64b7613 in vlc_encoder_Destroy ../../src/input/decoder_helpers.c:176 #2 0x7f83ccb31986 in transcode_encoder_delete ../../modules/stream_out/transcode/encoder/encoder.c:55 #3 0x7f83ccb53203 in transcode_video_clean ../../modules/stream_out/transcode/video.c:405 #4 0x7f83ccb2f6ac in Del ../../modules/stream_out/transcode/transcode.c:736 #5 0x7f83d679814f in sout_StreamIdDel ../../src/stream_output/stream_output.c:707 #6 0x7f83d6791cc3 in sout_InputDelete ../../src/stream_output/stream_output.c:155 #7 ... 0x619000050498 is located 1048 bytes inside of 1072-byte region [0x619000050080,0x6190000504b0) freed by thread T10 (vlc-input) here: #0 0x7f83d73b6388 in __interceptor_free.part.0 (/lib64/libasan.so.8+0xb9388) #1 0x7f83d6740fcd in vlc_objres_clear ../../src/misc/objres.c:93 #2 0x7f83d640265d in module_unneed ../../src/modules/modules.c:307 #3 0x7f83ccb3f212 in transcode_encoder_video_close ../../modules/stream_out/transcode/encoder/video.c:390 #4 0x7f83ccb331a2 in transcode_encoder_close ../../modules/stream_out/transcode/encoder/encoder.c:188 #5 0x7f83ccb53178 in transcode_video_clean ../../modules/stream_out/transcode/video.c:404 #6 0x7f83ccb2f6ac in Del ../../modules/stream_out/transcode/transcode.c:736 #7 ... ```
0d61cd2d -
This makes the destroy procedure implicitly the same than the closing with extra resource removal steps.
9c93ba93 -
Destroying the encoder should implicitly call the correct close callbacks.
d23d3574
Showing
- modules/stream_out/transcode/audio.c 0 additions, 1 deletionmodules/stream_out/transcode/audio.c
- modules/stream_out/transcode/encoder/encoder.c 9 additions, 7 deletionsmodules/stream_out/transcode/encoder/encoder.c
- modules/stream_out/transcode/encoder/encoder_priv.h 1 addition, 1 deletionmodules/stream_out/transcode/encoder/encoder_priv.h
- modules/stream_out/transcode/encoder/video.c 1 addition, 5 deletionsmodules/stream_out/transcode/encoder/video.c
- modules/stream_out/transcode/spu.c 0 additions, 4 deletionsmodules/stream_out/transcode/spu.c
- modules/stream_out/transcode/video.c 0 additions, 3 deletionsmodules/stream_out/transcode/video.c