v4l-memleak-fix.diff

Fix for memleak in cap_libv4l.cpp - Georg Engstrand, 2011-12-15 09:21 am

Download (1.6 kB)

 
modules/highgui/src/cap_libv4l.cpp (working copy)
821 821

  
822 822
#ifdef USE_TEMP_BUFFER
823 823
       if (n_buffers == 0) {
824
	 capture->buffers[MAX_V4L_BUFFERS].start = malloc(buf.length);
825
	 capture->buffers[MAX_V4L_BUFFERS].length = buf.length;
824
           if (capture->buffers[MAX_V4L_BUFFERS].start) {
825
               free(capture->buffers[MAX_V4L_BUFFERS].start);
826
               capture->buffers[MAX_V4L_BUFFERS].start = NULL;
827
		   }
828
		
829
           capture->buffers[MAX_V4L_BUFFERS].start = malloc(buf.length);
830
           capture->buffers[MAX_V4L_BUFFERS].length = buf.length;
826 831
       };
827 832
#endif
828 833
   }
......
1006 1011
   capture->width  = DEFAULT_V4L_WIDTH;
1007 1012
   capture->height = DEFAULT_V4L_HEIGHT;
1008 1013

  
1014
#ifdef USE_TEMP_BUFFER
1015
   capture->buffers[MAX_V4L_BUFFERS].start = NULL;
1016
#endif
1017

  
1009 1018
   /* Select camera, or rather, V4L video source */
1010 1019
   if (index<0) { // Asking for the first device available
1011 1020
     for (; autoindex<MAX_CAMERAS;autoindex++)
......
1184 1193

  
1185 1194
      }
1186 1195

  
1187

  
1188 1196
      /* preparation is ok */
1189 1197
      capture->FirstCapture = 0;
1190 1198
   }
......
1694 1702
     if (capture->frame.imageData)
1695 1703
       cvFree(&capture->frame.imageData);
1696 1704

  
1705
#ifdef USE_TEMP_BUFFER
1706
     if (capture->buffers[MAX_V4L_BUFFERS].start) {
1707
       free(capture->buffers[MAX_V4L_BUFFERS].start);
1708
       capture->buffers[MAX_V4L_BUFFERS].start = NULL;
1709
     }
1710
#endif
1711

  
1697 1712
     //v4l2_free_ranges(capture);
1698 1713
     //cvFree((void **)capture);
1699 1714
   }