mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-20 23:00:02 +01:00
fix possible memory leaks
This commit is contained in:
@@ -1065,6 +1065,12 @@ void *v4l2open ( const char *file, const int input_channel, int host_fmt, int wi
|
|||||||
}
|
}
|
||||||
|
|
||||||
v->buffers = (bufs*) calloc( v->reqbuf.count, sizeof(*v->buffers));
|
v->buffers = (bufs*) calloc( v->reqbuf.count, sizeof(*v->buffers));
|
||||||
|
if(!v->buffers) {
|
||||||
|
veejay_msg(0, "v4l2: Memory allocation failed");
|
||||||
|
free(v);
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for( i = 0; i < v->reqbuf.count; i ++ ) {
|
for( i = 0; i < v->reqbuf.count; i ++ ) {
|
||||||
memset( &(v->buffer), 0, sizeof(v->buffer));
|
memset( &(v->buffer), 0, sizeof(v->buffer));
|
||||||
@@ -1091,6 +1097,7 @@ void *v4l2open ( const char *file, const int input_channel, int host_fmt, int wi
|
|||||||
// munmap( v->buffer[k].start, v->buffer[k].length );
|
// munmap( v->buffer[k].start, v->buffer[k].length );
|
||||||
|
|
||||||
free(v->buffers);
|
free(v->buffers);
|
||||||
|
v->buffers = NULL;
|
||||||
//free(v);
|
//free(v);
|
||||||
//close(fd);
|
//close(fd);
|
||||||
//return NULL;
|
//return NULL;
|
||||||
@@ -1102,6 +1109,7 @@ void *v4l2open ( const char *file, const int input_channel, int host_fmt, int wi
|
|||||||
if( v4l2_vidioc_qbuf( v ) == -1 ) {
|
if( v4l2_vidioc_qbuf( v ) == -1 ) {
|
||||||
veejay_msg(0, "v4l2: VIDIOC_QBUF failed with:%d, %s", errno,strerror(errno));
|
veejay_msg(0, "v4l2: VIDIOC_QBUF failed with:%d, %s", errno,strerror(errno));
|
||||||
free(v->buffers);
|
free(v->buffers);
|
||||||
|
v->buffers = NULL;
|
||||||
// free(v);
|
// free(v);
|
||||||
// close(fd);
|
// close(fd);
|
||||||
// return NULL;
|
// return NULL;
|
||||||
@@ -1120,14 +1128,14 @@ void *v4l2open ( const char *file, const int input_channel, int host_fmt, int wi
|
|||||||
v->fd = open( file , O_RDWR );
|
v->fd = open( file , O_RDWR );
|
||||||
if(v->fd <= 0 ) {
|
if(v->fd <= 0 ) {
|
||||||
veejay_msg(0,"v4l2: Cannot re-open device:%d,%s",errno,strerror(errno));
|
veejay_msg(0,"v4l2: Cannot re-open device:%d,%s",errno,strerror(errno));
|
||||||
free(v->buffers);
|
if(v->buffers) free(v->buffers);
|
||||||
free(v);
|
free(v);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
v->rw = 1;
|
v->rw = 1;
|
||||||
goto v4l2_rw_fallback;
|
goto v4l2_rw_fallback;
|
||||||
} else{
|
} else{
|
||||||
free(v->buffers);
|
if(v->buffers) free(v->buffers);
|
||||||
free(v);
|
free(v);
|
||||||
close(fd);
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -1154,6 +1162,12 @@ v4l2_rw_fallback:
|
|||||||
v->format.fmt.pix.sizeimage = min;
|
v->format.fmt.pix.sizeimage = min;
|
||||||
|
|
||||||
v->sizeimage = v->format.fmt.pix.sizeimage;
|
v->sizeimage = v->format.fmt.pix.sizeimage;
|
||||||
|
|
||||||
|
if(v->buffers != NULL) {
|
||||||
|
veejay_msg(VEEJAY_MSG_DEBUG,"v4l2: read/write buffer is dirty, re-allocate");
|
||||||
|
free(v->buffers);
|
||||||
|
}
|
||||||
|
|
||||||
v->buffers = (bufs*) calloc( 1, sizeof(*v->buffers));
|
v->buffers = (bufs*) calloc( 1, sizeof(*v->buffers));
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG,"v4l2: read/write buffer size is %d bytes", v->format.fmt.pix.sizeimage );
|
veejay_msg(VEEJAY_MSG_DEBUG,"v4l2: read/write buffer size is %d bytes", v->format.fmt.pix.sizeimage );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user