Memory leakage in usrp2::eth_buffer

Hi,
in the method usrp2::eth_buffer::open in case the attempt to use the
socket option PACKET_RX_RING
fails an mmap is performed instead of a malloc.

The method usrp2::eth_buffer::close however has to perform a munmap in
order to let the
kernel release the mapped memory, indeed only closing the file
descriptor isn’t enough.

I suggest to change (inside the close method):

if (!d_using_tpring && d_buf)
       free(d_buf);

to:

if (!d_using_tpring) {
free(d_buf);
} else {
if (d_buf) munmap(d_buf, d_buflen);
}

note that there is no need to test for d_buf in case of free call
indeed freeing a pointer to 0 is perfect valid code, the standard
say that in case of free(NULL) no action is taken, to the other side
munmap a NULL pointer is not permitted (hence the test).

Regards
Gaetano M.


This is the patch:

— gnuradio-3.3.0/usrp2/host/lib/eth_buffer.cc 2010-06-01
07:04:09.000000000 +0200
+++ gnuradio-3.3.0-fix/usrp2/host/lib/eth_buffer.cc 2011-03-10
11:05:52.652353106 +0100
@@ -156,8 +156,14 @@
{
// if we have background thread, stop it here

  • if (!d_using_tpring && d_buf)
  • if (!d_using_tpring && d_buf) {
    free(d_buf);

  • }

  • else {

  •    if(d_buf) {
    
  •        munmap(d_buf, d_buflen);
    
  •    }
    
  • }

    return d_ethernet->close();
    }

On Wed, Mar 9, 2011 at 7:35 PM, Gaetano M. [email protected]
wrote:

I suggest to change (inside the close method):
if (d_buf) munmap(d_buf, d_buflen);

cpp-today.blogspot.com


cpp-today.blogspot.com

Tom,
let me know when you have applied it.

On Thu, Mar 10, 2011 at 2:07 PM, Tom R. [email protected]
wrote:

07:04:09.000000000 +0200

  • else {

Hi,

}
cpp-today.blogspot.com
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio


cpp-today.blogspot.com

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs