Bug 207 - Fixed memory corruption due to incorrect shared memory offsets.
git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@1613 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
parent
01bf61363c
commit
9e03d55a8c
|
@ -137,7 +137,11 @@ void Monitor::Setup()
|
||||||
|
|
||||||
Debug( 1, ( "monitor purpose=%d", purpose ));
|
Debug( 1, ( "monitor purpose=%d", purpose ));
|
||||||
|
|
||||||
int shared_data_size = sizeof(SharedData)+sizeof(TriggerData)+(image_buffer_count*sizeof(time_t))+(image_buffer_count*camera->ImageSize());
|
int shared_data_size = sizeof(SharedData)
|
||||||
|
+ sizeof(TriggerData)
|
||||||
|
+ (image_buffer_count*sizeof(struct timeval))
|
||||||
|
+ (image_buffer_count*camera->ImageSize());
|
||||||
|
|
||||||
Debug( 1, ( "shm.size=%d", shared_data_size ));
|
Debug( 1, ( "shm.size=%d", shared_data_size ));
|
||||||
shmid = shmget( (config.shm_key&0xffffff00)|id, shared_data_size, IPC_CREAT|0700 );
|
shmid = shmget( (config.shm_key&0xffffff00)|id, shared_data_size, IPC_CREAT|0700 );
|
||||||
if ( shmid < 0 )
|
if ( shmid < 0 )
|
||||||
|
@ -146,13 +150,16 @@ void Monitor::Setup()
|
||||||
exit( -1 );
|
exit( -1 );
|
||||||
}
|
}
|
||||||
unsigned char *shm_ptr = (unsigned char *)shmat( shmid, 0, 0 );
|
unsigned char *shm_ptr = (unsigned char *)shmat( shmid, 0, 0 );
|
||||||
shared_data = (SharedData *)shm_ptr;
|
if ( shm_ptr < 0 )
|
||||||
if ( shared_data < 0 )
|
|
||||||
{
|
{
|
||||||
Error(( "Can't shmat: %s", strerror(errno)));
|
Error(( "Can't shmat: %s", strerror(errno)));
|
||||||
exit( -1 );
|
exit( -1 );
|
||||||
}
|
}
|
||||||
trigger_data = (TriggerData *)(shm_ptr + sizeof(SharedData));
|
|
||||||
|
shared_data = (SharedData *)shm_ptr;
|
||||||
|
trigger_data = (TriggerData *)((char *)shared_data + sizeof(SharedData));
|
||||||
|
struct timeval *shared_timestamps = (struct timeval *)((char *)trigger_data + sizeof(TriggerData));
|
||||||
|
unsigned char *shared_images = (unsigned char *)((char *)shared_timestamps + (image_buffer_count*sizeof(struct timeval)));
|
||||||
|
|
||||||
if ( purpose == CAPTURE )
|
if ( purpose == CAPTURE )
|
||||||
{
|
{
|
||||||
|
@ -184,8 +191,6 @@ void Monitor::Setup()
|
||||||
exit( -1 );
|
exit( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
struct timeval *shared_timestamps = (struct timeval *)(shm_ptr+sizeof(SharedData)+sizeof(TriggerData));
|
|
||||||
unsigned char *shared_images = (unsigned char *)(shm_ptr+sizeof(SharedData)+sizeof(TriggerData)+(image_buffer_count*sizeof(struct timeval)));
|
|
||||||
image_buffer = new Snapshot[image_buffer_count];
|
image_buffer = new Snapshot[image_buffer_count];
|
||||||
for ( int i = 0; i < image_buffer_count; i++ )
|
for ( int i = 0; i < image_buffer_count; i++ )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue