[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