[FFmpeg-user] How to correctly free a double-linked list

Ulf Zibis Ulf.Zibis at gmx.de
Sun Jul 7 17:37:13 EEST 2019


Am 07.07.19 um 14:20 schrieb Ulf Zibis:
>> If you can, install and use valgrind to help you debug such problems.
> Good idea, I will do that ... guess it needs some time to understand how
> it works.

I now also have tried valgrind. To me this seems, that the cause is
outside of my code:

valgrind: m_mallocfree.c:307 (get_bszB_as_is): Assertion 'bszB_lo ==
bszB_hi' failed.
valgrind: Heap block lo/hi size mismatch: lo = 113, hi = 114.
This is probably caused by your program erroneously writing past the
end of a heap block and corrupting heap metadata.  If you fix any
invalid writes reported by Memcheck, this assertion failure will
probably go away.  Please try that before reporting this as a bug.


host stacktrace:
==19306==    at 0x580441BA: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x580442D4: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x58044459: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x5805184C: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x58053B56: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x5800B8CC: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x5800BAD7: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x5800BDA4: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x5809F5DC: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==19306==    by 0x580AED50: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)

sched status:
  running_tid=1

Thread 1: status = VgTs_Runnable (lwpid 19306)
==19306==    at 0x4C31E76: memalign (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19306==    by 0x4C31F91: posix_memalign (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19306==    by 0xF3F0B2: av_malloc (mem.c:87)
==19306==    by 0xF3F2B8: av_mallocz (mem.c:238)
==19306==    by 0xF2D83D: av_buffer_ref (buffer.c:95)
==19306==    by 0xF37D41: av_frame_ref (frame.c:478)
==19306==    by 0x2851D1: do_video_out (ffmpeg.c:1344)
==19306==    by 0x28A1EA: reap_filters (ffmpeg.c:1504)
==19306==    by 0x28E7DD: transcode_step (ffmpeg.c:4648)
==19306==    by 0x28E7DD: transcode (ffmpeg.c:4692)
==19306==    by 0x26B51D: main (ffmpeg.c:4894)

Thread 2: status = VgTs_WaitSys (lwpid 19309)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0x865205: frame_worker_thread (pthread_frame.c:177)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 3: status = VgTs_WaitSys (lwpid 19310)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0x865205: frame_worker_thread (pthread_frame.c:177)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 4: status = VgTs_WaitSys (lwpid 19311)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0x865205: frame_worker_thread (pthread_frame.c:177)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 5: status = VgTs_WaitSys (lwpid 19312)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0xF5799D: thread_worker (slicethread.c:78)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 6: status = VgTs_WaitSys (lwpid 19313)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0xF5799D: thread_worker (slicethread.c:78)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 7: status = VgTs_WaitSys (lwpid 19314)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0xF5799D: thread_worker (slicethread.c:78)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 8: status = VgTs_WaitSys (lwpid 19316)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0xF5799D: thread_worker (slicethread.c:78)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 9: status = VgTs_WaitSys (lwpid 19318)
==19306==    at 0x58371AA: __lll_unlock_wake (lowlevellock.S:371)
==19306==    by 0x58317DE: __pthread_mutex_unlock_usercnt
(pthread_mutex_unlock.c:54)
==19306==    by 0x58317DE: pthread_mutex_unlock (pthread_mutex_unlock.c:345)
==19306==    by 0xF57A18: thread_worker (slicethread.c:89)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)

Thread 10: status = VgTs_WaitSys (lwpid 19319)
==19306==    at 0x58339F3: futex_wait_cancelable (futex-internal.h:88)
==19306==    by 0x58339F3: __pthread_cond_wait_common
(pthread_cond_wait.c:502)
==19306==    by 0x58339F3: pthread_cond_wait@@GLIBC_2.3.2
(pthread_cond_wait.c:655)
==19306==    by 0xF5799D: thread_worker (slicethread.c:78)
==19306==    by 0x582D6DA: start_thread (pthread_create.c:463)
==19306==    by 0x5B6688E: clone (clone.S:95)


Note: see also the FAQ in the source distribution.
It contains workarounds to several common problems.
In particular, if Valgrind aborted or crashed after
identifying problems in your program, there's a good chance
that fixing those problems will prevent Valgrind aborting or
crashing, especially if it happened in m_mallocfree.c.

If that doesn't help, please report this bug to: www.valgrind.org

In the bug report, send all the above text, the valgrind
version, and what OS and version you are using.  Thanks.

-Ulf



More information about the ffmpeg-user mailing list