Fixed various mapped memory errors.

git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@2624 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
stan 2008-09-01 15:31:20 +00:00
parent dfb9331c62
commit a79594387c
1 changed files with 13 additions and 13 deletions

View File

@ -80,7 +80,7 @@ bool Monitor::MonitorLink::connect()
map_fd = open( mem_file, O_RDWR, (mode_t)0600 );
if ( map_fd < 0 )
{
Debug( 3, ( "Can't open linked memory map file %s: %s", mem_file, strerror(errno)));
Debug( 3, "Can't open linked memory map file %s: %s", mem_file, strerror(errno) );
disconnect();
return( false );
}
@ -88,20 +88,20 @@ bool Monitor::MonitorLink::connect()
struct stat map_stat;
if ( fstat( map_fd, &map_stat ) < 0 )
{
Error(( "Can't stat linked memory map file %s: %s", mem_file, strerror(errno)));
Error( "Can't stat linked memory map file %s: %s", mem_file, strerror(errno) );
disconnect();
return( false );
}
if ( map_stat.st_size == 0 )
{
Error(( "Linked memory map file %s is empty: %s", mem_file, strerror(errno)));
Error( "Linked memory map file %s is empty: %s", mem_file, strerror(errno) );
disconnect();
return( false );
}
else if ( map_stat.st_size < mem_size )
{
Error(( "Got unexpected memory map file size %d, expected %d", map_stat.st_size, mem_size ));
Error( "Got unexpected memory map file size %ld, expected %d", map_stat.st_size, mem_size );
disconnect();
return( false );
}
@ -109,7 +109,7 @@ bool Monitor::MonitorLink::connect()
mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED, map_fd, 0 );
if ( mem_ptr == MAP_FAILED )
{
Error(( "Can't map file %s (%d bytes) to memory: %s", mem_file, mem_size, strerror(errno)));
Error( "Can't map file %s (%d bytes) to memory: %s", mem_file, mem_size, strerror(errno) );
disconnect();
return( false );
}
@ -117,14 +117,14 @@ bool Monitor::MonitorLink::connect()
shm_id = shmget( (config.shm_key&0xffff0000)|id, mem_size, 0700 );
if ( shm_id < 0 )
{
Debug( 3, "Can't shmget link memory: %s", strerror(errno));
Debug( 3, "Can't shmget link memory: %s", strerror(errno) );
connected = false;
return( false );
}
mem_ptr = (unsigned char *)shmat( shm_id, 0, 0 );
if ( mem_ptr < 0 )
{
Debug( 3, "Can't shmat link memory: %s", strerror(errno));
Debug( 3, "Can't shmat link memory: %s", strerror(errno) );
connected = false;
return( false );
}
@ -336,30 +336,30 @@ Monitor::Monitor(
snprintf( mem_file, sizeof(mem_file), "%s/.zm.mmap.%d", config.path_map, id );
map_fd = open( mem_file, O_RDWR|O_CREAT, (mode_t)0600 );
if ( map_fd < 0 )
Fatal(( "Can't open memory map file %s, probably not enough space free: %s", mem_file, strerror(errno)));
Fatal( "Can't open memory map file %s, probably not enough space free: %s", mem_file, strerror(errno) );
struct stat map_stat;
if ( fstat( map_fd, &map_stat ) < 0 )
Fatal(( "Can't stat memory map file %s: %s", mem_file, strerror(errno)));
Fatal( "Can't stat memory map file %s: %s", mem_file, strerror(errno) );
if ( map_stat.st_size == 0 )
{
// Allocate the size
if ( ftruncate( map_fd, mem_size ) < 0 )
Fatal(( "Can't extend memory map file %s to %d bytes: %s", mem_file, mem_size, strerror(errno)));
Fatal( "Can't extend memory map file %s to %d bytes: %s", mem_file, mem_size, strerror(errno) );
}
else if ( map_stat.st_size != mem_size )
{
Error(( "Got unexpected memory map file size %d, expected %d", map_stat.st_size, mem_size ));
Error( "Got unexpected memory map file size %ld, expected %d", map_stat.st_size, mem_size );
}
mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, map_fd, 0 );
if ( mem_ptr == MAP_FAILED )
if ( errno == EAGAIN )
{
Debug( 1, ( "Unable to map file %s (%d bytes) to locked memory, trying unlocked", mem_file, mem_size, strerror(errno), errno ));
Debug( 1, "Unable to map file %s (%d bytes) to locked memory, trying unlocked", mem_file, mem_size );
mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED, map_fd, 0 );
}
if ( mem_ptr == MAP_FAILED )
Fatal(( "Can't map file %s (%d bytes) to memory: %s(%d)", mem_file, mem_size, strerror(errno), errno ));
Fatal( "Can't map file %s (%d bytes) to memory: %s(%d)", mem_file, mem_size, strerror(errno), errno );
#else // ZM_MEM_MAPPED
shm_id = shmget( (config.shm_key&0xffff0000)|id, mem_size, IPC_CREAT|0700 );
if ( shm_id < 0 )