FFmpeg/libavutil
wm4 c790e31ae4 lavu: fix memory leaks by using a mutex instead of atomics
The buffer pool has to atomically add and remove entries from the linked
list of available buffers. This was done by removing the entire list
with a CAS operation, working on it, and then setting it back again
(using a retry-loop in case another thread was doing the same thing).

This could effectively cause memory leaks: while a thread was working on
the buffer list, other threads would allocate new buffers, increasing
the pool's total size. There was no real leak, but since these extra
buffers were not needed, but not free'd either (except when the buffer
pool was destroyed), this had the same effects as a real leak. For some
reason, growth was exponential, and could easily kill the process due
to OOM in real-world uses.

Fix this by using a mutex to protect the list operations. The fancy
way atomics remove the whole list to work on it is not needed anymore,
which also avoids the situation which was causing the leak.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
(cherry picked from commit fbd6c97f9c)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
(cherry picked from commit 517ce1d09b)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2014-11-27 13:45:36 +01:00
..
aarch64 aarch64: Use the correct syntax for relocations 2014-05-29 14:48:13 +03:00
arm arm: hpeldsp: prevent overreads in armv6 asm 2014-03-05 16:21:52 +01:00
avr32 Replace FFmpeg with Libav in licence headers 2011-03-19 13:33:20 +00:00
bfin Replace FFmpeg with Libav in licence headers 2011-03-19 13:33:20 +00:00
mips mips: intreadwrite: fix inline asm for gcc 4.8 2012-05-09 13:45:22 +01:00
ppc ppc: Add and use convenience macro to check for AltiVec availability 2013-08-28 23:54:15 +02:00
sh4 Replace FFmpeg with Libav in licence headers 2011-03-19 13:33:20 +00:00
tomi intreadwrite: tomi: Add missing attributes.h #include for av_always_inline 2013-02-20 00:45:30 +01:00
x86 x86inc: Speed up assembling with Yasm 2014-01-26 18:40:08 +01:00
adler32.c tests/examples: Mark some variables only used within their files as static. 2011-12-08 01:01:00 +01:00
adler32.h doxy: provide a start page and document libavutil 2011-11-22 17:16:02 +01:00
aes.c avutil: remove timer.h include from internal.h 2014-01-25 21:50:20 +01:00
aes.h avutil: Add functions for allocating opaque contexts for algorithms 2012-10-11 23:35:27 +03:00
atomic.c atomics: cosmetics: Restructure ifdefs for greater clarity 2013-12-20 11:23:13 +01:00
atomic.h atomics: cosmetics: Restructure ifdefs for greater clarity 2013-12-20 11:23:13 +01:00
atomic_gcc.h atomic: fix CAS with armcc. 2013-03-09 08:36:40 +01:00
atomic_suncc.h atomic: Add include guards to the implementation headers 2013-03-08 12:00:06 +02:00
atomic_win32.h atomic: Add include guards to the implementation headers 2013-03-08 12:00:06 +02:00
attributes.h attributes: disable flatten on llvm/clang 2013-11-03 11:51:40 +01:00
audio_fifo.c Don't include common.h from avutil.h 2012-08-15 22:32:06 +03:00
audio_fifo.h avutil: add audio fifo buffer 2012-04-20 09:43:11 -04:00
audioconvert.h lavu: rename audioconvert.* to channel_layout.* and deprecate audioconvert.h 2012-11-11 13:35:12 -05:00
avassert.h multiple inclusion guard cleanup 2011-05-21 13:48:10 +02:00
avstring.c avstring-test: Mark pointer passed to av_free() as non-const 2013-10-23 13:17:23 +02:00
avstring.h avstring: Add locale independent versions of some ctype.h functions 2013-03-07 15:16:26 +02:00
avutil.h lavu: Move preprocessor macros in a separate file 2013-12-29 22:52:04 +01:00
base64.c base64-test: Remove posibility of returning restricted exit codes 2013-10-25 11:06:32 +01:00
base64.h doxy: provide a start page and document libavutil 2011-11-22 17:16:02 +01:00
blowfish.c Drop pointless directory name prefixes from #includes in the current dir 2013-09-10 12:38:41 +02:00
blowfish.h Add Blowfish encryption support in libavutil 2012-07-04 15:10:57 +03:00
bswap.h aarch64: bswap inline assembly 2014-01-14 22:19:38 +01:00
buffer.c lavu: fix memory leaks by using a mutex instead of atomics 2014-11-27 13:45:36 +01:00
buffer.h avutil: doxy: Small clarification for av_buffer_create() 2013-04-30 13:33:43 -04:00
buffer_internal.h lavu: fix memory leaks by using a mutex instead of atomics 2014-11-27 13:45:36 +01:00
channel_layout.c Add missing #includes for *INT64_MAX and *INT64_C 2013-11-23 21:55:52 +01:00
channel_layout.h lavu: Add values for various Dolby flags to the AVMatrixEncoding enum. 2014-01-05 16:41:56 +01:00
colorspace.h Replace FFmpeg with Libav in licence headers 2011-03-19 13:33:20 +00:00
common.h Add missing #includes for *INT64_MAX and *INT64_C 2013-11-23 21:55:52 +01:00
cpu.c aarch64: add cpuflags support for NEON and VFP 2014-01-15 12:05:09 +01:00
cpu.h libavutil: x86: Add AVX2 capable CPU detection. 2013-10-25 19:36:55 +01:00
cpu_internal.h aarch64: add cpuflags support for NEON and VFP 2014-01-15 12:05:09 +01:00
crc.c crc: Move static data table from header to .c file 2013-02-11 16:48:44 +01:00
crc.h crc: av_crc() parameter names should match between .c, .h and doxygen 2012-11-16 10:38:23 +01:00
des.c Drop pointless directory name prefixes from #includes in the current dir 2013-09-10 12:38:41 +02:00
des.h des: add possibility to calculate DES-CBC-MAC with small buffer 2011-09-21 08:28:20 +02:00
dict.c Use the avstring.h locale-independent character type functions 2013-03-07 15:16:36 +02:00
dict.h doxy: Format @code blocks so they render properly 2014-02-04 22:09:47 +01:00
downmix_info.c lavu: add AV_FRAME_DATA_DOWNMIX_INFO side data type. 2014-02-15 22:24:53 +01:00
downmix_info.h lavu: add AV_FRAME_DATA_DOWNMIX_INFO side data type. 2014-02-15 22:24:53 +01:00
error.c avutil: Add AVERROR_EXPERIMENTAL 2012-10-21 22:38:21 +02:00
error.h error.h: Do not circularly depend on avutil.h 2013-12-25 00:12:05 +01:00
eval.c avutil: remove timer.h include from internal.h 2014-01-25 21:50:20 +01:00
eval.h Fix a bunch of common typos. 2011-12-11 00:32:25 +01:00
fifo.c fifo: K&R formatting cosmetics 2013-07-06 14:28:06 +02:00
fifo.h lavu: remove disabled FF_API_AV_FIFO_PEEK cruft 2012-10-23 07:33:05 +02:00
file.c libavutil: Move avpriv_open to a new file, file_open.c 2013-08-10 00:53:33 +03:00
file.h Don't include common.h from avutil.h 2012-08-15 22:32:06 +03:00
file_open.c libavutil: Move avpriv_open to a new file, file_open.c 2013-08-10 00:53:33 +03:00
float_dsp.c Drop pointless directory name prefixes from #includes in the current dir 2013-09-10 12:38:41 +02:00
float_dsp.h float_dsp: fix errors in documentation 2014-03-08 19:36:20 -05:00
frame.c frame: cosmetics, reindent 2013-12-09 08:45:08 +01:00
frame.h doc: fix a couple of typos in frame.h 2014-03-09 17:53:09 -04:00
hmac.c avutil: Add av_cold attributes to init functions missing them 2013-05-04 22:48:05 +02:00
hmac.h lavu: Add an API for calculating HMAC (RFC 2104) 2013-01-15 11:54:19 +02:00
imgutils.c pixdesc: rename PIX_FMT_* flags to AV_PIX_FMT_FLAG_* 2013-05-15 07:46:51 +02:00
imgutils.h avutil: Rename ff_set_systematic_pal2() ---> avpriv_set_systematic_pal2() 2012-10-13 19:59:20 +02:00
internal.h avutil: remove timer.h include from internal.h 2014-01-25 21:50:20 +01:00
intfloat.h intfloat: Don't use designated initializers in the public headers 2012-07-02 14:05:40 +03:00
intmath.c lavu: add av_ctz() for trailing zero bit count 2012-11-05 15:32:29 -05:00
intmath.h lavu: add av_ctz() for trailing zero bit count 2012-11-05 15:32:29 -05:00
intreadwrite.h intreadwrite: Add AV_COPYxxU macros for copying to/from unaligned addresses 2012-10-23 16:54:08 +02:00
lfg.c avformat: Remove non-compiling and/or silly commented-out printf/av_log statements 2012-10-01 10:24:28 +02:00
lfg.h Give all anonymously typedeffed structs in headers a name 2012-10-06 09:27:11 +02:00
libavutil.v Revert "avutil: make some tables visible again" 2012-10-23 07:33:05 +02:00
libm.h libm: add fallbacks for various single-precision functions 2012-10-23 12:00:21 +01:00
lls.c x86: lpc: simd av_update_lls 2013-06-29 13:23:57 +02:00
lls.h x86: lpc: simd av_update_lls 2013-06-29 13:23:57 +02:00
log.c log: Have function parameter names match between .c and .h file 2014-02-12 12:08:02 +01:00
log.h log: Have function parameter names match between .c and .h file 2014-02-12 12:08:02 +01:00
log2_tab.c avutil: Duplicate ff_log2_tab instead of sharing it across libs 2012-10-12 20:39:17 +02:00
lzo.c lzo: Handle integer overflow 2014-06-25 15:37:01 +02:00
lzo.h avutil: Move memcpy_backptr() to mem.c 2012-10-25 11:36:57 +02:00
macros.h lavu: Move preprocessor macros in a separate file 2013-12-29 22:52:04 +01:00
Makefile lavu: add AV_FRAME_DATA_DOWNMIX_INFO side data type. 2014-02-15 22:24:53 +01:00
mathematics.c mathematics: remove asserts from av_rescale_rnd() 2014-01-03 16:39:30 +01:00
mathematics.h mathematics: Don't use division by zero in NAN/INFINITY macros 2012-07-01 19:06:13 +03:00
md5.c Remove pointless #undefs of previously forbidden functions. 2012-12-04 21:40:22 +01:00
md5.h avutil: Add functions for allocating opaque contexts for algorithms 2012-10-11 23:35:27 +03:00
mem.c Move av_fast_{m,re}alloc from lavc to lavu. 2013-11-14 09:42:22 +01:00
mem.h Move av_fast_{m,re}alloc from lavc to lavu. 2013-11-14 09:42:22 +01:00
old_pix_fmts.h Deprecate obsolete XvMC hardware decoding support 2013-11-13 21:07:45 +01:00
opt.c AVOptions: do not range check flag options. 2013-10-27 21:40:33 +01:00
opt.h Give less generic names to global library option arrays 2013-08-02 19:19:02 +02:00
parseutils.c parseutils: fix discarding const attribute warning 2013-12-12 16:10:14 +01:00
parseutils.h doxygen: misc consistency, spelling and wording fixes 2011-12-12 23:06:23 +01:00
pixdesc.c Deprecate obsolete XvMC hardware decoding support 2013-11-13 21:07:45 +01:00
pixdesc.h Use correct Doxygen syntax 2013-10-03 17:53:51 +02:00
pixfmt.h Deprecate obsolete XvMC hardware decoding support 2013-11-13 21:07:45 +01:00
random_seed.c random_seed: Rewrite the generic clock() based seed code 2014-01-06 18:53:58 +02:00
random_seed.h doxy: provide a start page and document libavutil 2011-11-22 17:16:02 +01:00
rational.c Remove commented-out #includes 2013-05-15 23:01:21 +02:00
rational.h rational: add av_inv_q() returning the inverse of an AVRational 2012-08-05 17:46:41 +01:00
rc4.c Replace FFmpeg with Libav in licence headers 2011-03-19 13:33:20 +00:00
rc4.h doxygen: Consistently use '@' instead of '\' for Doxygen markup. 2011-06-24 00:37:49 +02:00
samplefmt.c samplefmt: avoid integer overflow in av_samples_get_buffer_size() 2014-02-04 12:32:47 -05:00
samplefmt.h lavu: remove disabled FF_API_GET_BITS_PER_SAMPLE_FMT cruft 2012-10-23 07:33:05 +02:00
sha.c avutil: Add av_cold attributes to init functions missing them 2013-05-04 22:48:05 +02:00
sha.h avutil: Add functions for allocating opaque contexts for algorithms 2012-10-11 23:35:27 +03:00
stereo3d.c avframe: add codec-independent stereoscopic metadata 2013-12-09 16:02:43 +01:00
stereo3d.h stereo3d: add missing include guards 2014-08-06 12:44:35 +01:00
thread.h lavu: add wrappers for the pthreads mutex API 2014-11-27 13:45:28 +01:00
time.c Drop pointless directory name prefixes from #includes in the current dir 2013-09-10 12:38:41 +02:00
time.h lavu: add av_usleep() function 2012-06-22 17:15:18 +01:00
timer.h lavu: add missing log.h include in timer.h 2014-02-05 21:00:51 +01:00
tree.c tree-test: Don't return restricted exit codes 2013-10-24 10:59:26 +01:00
tree.h tree.h: K&R formatting and typo cosmetics 2013-07-31 18:14:08 +02:00
utils.c lavu: Move preprocessor macros in a separate file 2013-12-29 22:52:04 +01:00
version.h lavu: add AV_FRAME_DATA_DOWNMIX_INFO side data type. 2014-02-15 22:24:53 +01:00
xtea.c Drop pointless directory name prefixes from #includes in the current dir 2013-09-10 12:38:41 +02:00
xtea.h doxygen: Fix function parameter names to match the code 2012-08-09 20:05:55 +02:00