Package: dvgrab Version: 3.2-2 Severity: important Tags: patch When grabbing video from my Panasonic NV-GS230 camera using a backport of version 3.2-2 in Lenny, valgrind report errors when the grabbing is terminated using ^C. This is the output after building dvgrab with the nostrip option to get debug output.
==11137== Memcheck, a memory error detector. ==11137== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al. ==11137== Using LibVEX rev 1854, a library for dynamic binary translation. ==11137== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP. ==11137== Using valgrind-3.3.1-Debian, a dynamic binary instrumentation framework. ==11137== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al. ==11137== For more details, rerun with: -v ==11137== Warning: Cannot set RR-scheduler Warning: Cannot disable swapping Capture Started "/tmp/foo004.dv": 7.00 MiB 51 frames timecode 00:00:00.00 date 2008.12.18 17:22:29 Capture Stopped ==11137== Invalid read of size 4 ==11137== at 0x80780C8: v4l2Reader::Close() (v4l2reader.cc:117) ==11137== by 0x807850C: v4l2Reader::~v4l2Reader() (v4l2reader.cc:56) ==11137== by 0x80556F7: DVgrab::cleanup() (dvgrab.cc:1306) ==11137== by 0x8055786: DVgrab::~DVgrab() (dvgrab.cc:157) ==11137== by 0x8070469: main (main.cc:135) ==11137== Address 0x526dfa4 is 4 bytes inside a block of size 32 free'd ==11137== at 0x4022B8A: free (vg_replace_malloc.c:323) ==11137== by 0x80780EE: v4l2Reader::Close() (v4l2reader.cc:120) ==11137== by 0x8077FDC: v4l2Reader::StopThread() (v4l2reader.cc:192) ==11137== by 0x80556D0: DVgrab::cleanup() (dvgrab.cc:1304) ==11137== by 0x8055786: DVgrab::~DVgrab() (dvgrab.cc:157) ==11137== by 0x8070469: main (main.cc:135) ==11137== ==11137== Invalid read of size 4 ==11137== at 0x80780CF: v4l2Reader::Close() (v4l2reader.cc:117) ==11137== by 0x807850C: v4l2Reader::~v4l2Reader() (v4l2reader.cc:56) ==11137== by 0x80556F7: DVgrab::cleanup() (dvgrab.cc:1306) ==11137== by 0x8055786: DVgrab::~DVgrab() (dvgrab.cc:157) ==11137== by 0x8070469: main (main.cc:135) ==11137== Address 0x526dfa0 is 0 bytes inside a block of size 32 free'd ==11137== at 0x4022B8A: free (vg_replace_malloc.c:323) ==11137== by 0x80780EE: v4l2Reader::Close() (v4l2reader.cc:120) ==11137== by 0x8077FDC: v4l2Reader::StopThread() (v4l2reader.cc:192) ==11137== by 0x80556D0: DVgrab::cleanup() (dvgrab.cc:1304) ==11137== by 0x8055786: DVgrab::~DVgrab() (dvgrab.cc:157) ==11137== by 0x8070469: main (main.cc:135) ==11137== ==11137== Invalid free() / delete / delete[] ==11137== at 0x4022B8A: free (vg_replace_malloc.c:323) ==11137== by 0x80780EE: v4l2Reader::Close() (v4l2reader.cc:120) ==11137== by 0x807850C: v4l2Reader::~v4l2Reader() (v4l2reader.cc:56) ==11137== by 0x80556F7: DVgrab::cleanup() (dvgrab.cc:1306) ==11137== by 0x8055786: DVgrab::~DVgrab() (dvgrab.cc:157) ==11137== by 0x8070469: main (main.cc:135) ==11137== Address 0x526dfa0 is 0 bytes inside a block of size 32 free'd ==11137== at 0x4022B8A: free (vg_replace_malloc.c:323) ==11137== by 0x80780EE: v4l2Reader::Close() (v4l2reader.cc:120) ==11137== by 0x8077FDC: v4l2Reader::StopThread() (v4l2reader.cc:192) ==11137== by 0x80556D0: DVgrab::cleanup() (dvgrab.cc:1304) ==11137== by 0x8055786: DVgrab::~DVgrab() (dvgrab.cc:157) ==11137== by 0x8070469: main (main.cc:135) ==11137== ==11137== ERROR SUMMARY: 9 errors from 3 contexts (suppressed: 61 from 1) ==11137== malloc/free: in use at exit: 35,216 bytes in 101 blocks. ==11137== malloc/free: 1,152 allocs, 1,052 frees, 113,716,869 bytes allocated. ==11137== For counts of detected errors, rerun with: -v ==11137== searching for pointers to 101 not-freed blocks. ==11137== checked 25,520,588 bytes. ==11137== ==11137== LEAK SUMMARY: ==11137== definitely lost: 0 bytes in 0 blocks. ==11137== possibly lost: 0 bytes in 0 blocks. ==11137== still reachable: 35,216 bytes in 101 blocks. ==11137== suppressed: 0 bytes in 0 blocks. ==11137== Rerun with --leak-check=full to see details of leaked memory. I believe this patch solve the issue: diff -ur dvgrab-3.2/v4l2reader.cc dvgrab-3.2-pere/v4l2reader.cc --- dvgrab-3.2/v4l2reader.cc 2008-02-27 04:31:52.000000000 +0100 +++ dvgrab-3.2-pere/v4l2reader.cc 2008-12-18 17:33:52.000000000 +0100 @@ -113,12 +113,21 @@ void v4l2Reader::Close( void ) { // Release mmaped buffers - for ( unsigned int i = 0; i < m_bufferCount; i++ ) - munmap( m_buffers[i].start, m_buffers[i].length ); - - // Release mmap buffers tracking list - free( m_buffers ); + if ( m_buffers ) + { + for ( unsigned int i = 0; i < m_bufferCount; i++ ) + { + if ( m_buffers[i].start ) + { + munmap( m_buffers[i].start, m_buffers[i].length ); + m_buffers[i].start = 0; + } + } + // Release mmap buffers tracking list + free( m_buffers ); + m_buffers = 0; + } // Close device file if ( m_fd > -1 ) { Happy hacking, -- Petter Reinholdtsen -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org