Copy-and-paste-error: The second part of the fix ought to be: if ( !have_wdir ) { free(cwd); }
Murat Murat Knecht schrieb: > Hi all, > > I think, I found a bug and a fix for it. > Could someone verify the rationale behind this bug, as I have this > SIGSEG on only one of two machines, and I don't quite see why it doesn't > occur always. (Same testprogram, equally compiled 1.2.4 OpenMPI). > Though the fix does prevent the segmentation fault. :) > > Thanks, > Murat > > > > > > Where: > Bug: > free() crashes when trying to free stack memory > ompi/communicator/comm_dyn.c:630 > > OBJ_RELEASE(apps[i]); > > > SIGSEG: > orte/mca/rmgr/rmgr_types.h:113 > > free (app_context->cwd); > > > > There are two ways that apps[i]->cwd is filled: > 1. dynamically allocated memory > 548 if ( !have_wdir ) { > getcwd(cwd, OMPI_PATH_MAX); > apps[i]->cwd = strdup(cwd); // <-- > } > > 2. stack > 354 char cwd[OMPI_PATH_MAX]; > // ... > 516 /* check for 'wdir' */ > ompi_info_get (array_of_info[i], "wdir", valuelen, cwd, &flag); > if ( flag ) { > apps[i]->cwd = cwd; // <-- > have_wdir = 1; > } > > > > Fix: Allocate cwd always manually and make sure, it is deleted afterwards. > > 1. > < char cwd[OMPI_PATH_MAX]; > --- > >> char *cwd = (char*)malloc(OMPI_PATH_MAX); >> > > 2. And on cleanup (somewhere below line 624) > > >> if ( !have_wdir ) { >> getcwd(cwd, OMPI_PATH_MAX); >> apps[i]->cwd = strdup(cwd); >> } >> > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users >