diff --git a/ompi/mca/common/sm/common_sm_mmap.c b/ompi/mca/common/sm/common_sm_mmap.c index 675ee6a049..4315323183 100644 --- a/ompi/mca/common/sm/common_sm_mmap.c +++ b/ompi/mca/common/sm/common_sm_mmap.c @@ -9,6 +9,7 @@ * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. + * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -165,7 +166,8 @@ mca_common_sm_mmap_t* mca_common_sm_mmap_init(size_t size, char *file_name, /* initialize the segment - only the first process to open the file */ seg->seg_offset = mem_offset; - seg->seg_size = size; + /* initialize size after subtracting out space used by the header */ + seg->seg_size = size - mem_offset; opal_atomic_unlock(&seg->seg_lock); seg->seg_inited = false; @@ -370,7 +372,8 @@ mca_common_sm_mmap_t* mca_common_sm_mmap_init(size_t size, char *file_name, opal_atomic_unlock(&seg->seg_lock); seg->seg_inited = false; seg->seg_offset = mem_offset; - seg->seg_size = size; + /* initialize size after subtracting out space used by the header */ + seg->seg_size = size - mem_offset; } map->hMappedObject = hMapObject; @@ -432,7 +435,7 @@ void* mca_common_sm_mmap_seg_alloc( void* addr; opal_atomic_lock(&seg->seg_lock); - if(seg->seg_offset + *size > map->map_size) { + if(seg->seg_offset + *size > seg->seg_size) { addr = NULL; } else { size_t fixup;