[FFmpeg-trac] #3169(avdevice:new): x11grab leaks shared memory if X server shuts down
FFmpeg
trac at avcodec.org
Mon Nov 25 08:46:13 CET 2013
#3169: x11grab leaks shared memory if X server shuts down
-------------------------------------+-------------------------------------
Reporter: | Type: defect
levialliance | Priority: normal
Status: new | Version: git-
Component: avdevice | master
Keywords: x11grab | Blocked By:
sharedmemory shm | Reproduced by developer: 0
Blocking: |
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
'''Summary of the bug:'''
If the X server supports the shared memory extension and is shut down
while ffmpeg x11grab is running then x11grab_read_close() is not called
and so the shared memory segment is not deleted.
It ''is'' cleaned up correctly in the event of SIGINT/SIGTERM on the
ffmpeg process -- it's only a broken X11 connection that has a problem.
'''How to reproduce:'''
Running on debian stable using git master HEAD compilation.
Minimal x11grab build:
{{{
./configure \
--cpu=core2 \
--arch=x86_64 \
\
--disable-doc \
--disable-bsfs \
--disable-outdevs \
--disable-parsers \
--disable-hwaccels \
--disable-devices \
--disable-protocols \
--disable-indevs \
--disable-filters \
--disable-decoders \
--disable-encoders \
--disable-demuxers \
--disable-muxers \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
\
--enable-ffmpeg \
--enable-gpl \
--enable-yasm \
\
--enable-muxer=rawvideo \
--enable-demuxer=rawvideo \
--enable-encoder=rawvideo \
--enable-decoder=rawvideo \
--enable-protocol=file \
--enable-protocol=pipe \
--enable-filter=fps \
--enable-filter=null \
--enable-indev=x11grab \
--enable-x11grab
}}}
No existing shared memory segments:
{{{
$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
}}}
Start X
Start ffmpeg:
{{{
$ .ffmpeg.x11grab -loglevel info -f x11grab -s 720x576 -framerate 25
-i :0 -an -f rawvideo -y /dev/null
ffmpeg version N-58440-g841c0aa Copyright (c) 2000-2013 the FFmpeg
developers
built on Nov 25 2013 18:38:31 with gcc 4.7 (Debian 4.7.2-5)
configuration: --cpu=core2 --arch=x86_64 --disable-doc --disable-bsfs
--disable-outdevs --disable-parsers --disable-hwaccels --disable-devices
--disable-protocols --disable-indevs --disable-filters --disable-decoders
--disable-encoders --disable-demuxers --disable-muxers --disable-ffplay
--disable-ffprobe --disable-ffserver --enable-ffmpeg --enable-gpl
--enable-yasm --enable-muxer=rawvideo --enable-demuxer=rawvideo --enable-
encoder=rawvideo --enable-decoder=rawvideo --enable-protocol=file
--enable-protocol=pipe --enable-filter=fps --enable-filter=null --enable-
indev=x11grab --enable-x11grab
libavutil 52. 54.100 / 52. 54.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.101 / 55. 21.101
libavdevice 55. 5.100 / 55. 5.100
libavfilter 3. 91.100 / 3. 91.100
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
[x11grab @ 0xcd3a20] device: :0 -> display: :0 x: 0 y: 0 width: 720
height: 576
[x11grab @ 0xcd3a20] shared memory extension found
Input #0, x11grab, from ':0':
Duration: N/A, start: 1385365236.018051, bitrate: 331776 kb/s
Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 720x576,
331776 kb/s, 25 tbr, 1000k tbn, 25 tbc
Output #0, rawvideo, to '/dev/null':
Metadata:
encoder : Lavf55.21.101
Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 720x576,
q=2-31, 200 kb/s, 90k tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo -> rawvideo)
Press [q] to stop, [?] for help
...
}}}
Stop X while leaving ffmpeg running
{{{
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server
":0"kbits/s
after 9714 requests (9714 known processed) with 0 events remaining.
}}}
Shared memory segment was not released:
{{{
$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 29622272 levi 777 1658880 0
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
}}}
Repeat until the system runs out of shared memory.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/3169>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list