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 [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]