Jump to content
Xtreme .Net Talk

CreateFileMapping; possible memory leak?


Recommended Posts

Guest DonDilworth
Posted

My program uses CreateFileMapping so multiple processes can access a common data base. The program runs fine and produces the correct answers. But when all is finished, sometimes the Windows OS has crashed. Other programs won't load, and the Power | Restart button doesn't work. I have to run shutdown.exe and then cold start the PC.

 

I UnmapViewOffile for each mapping I create, and then close the handle. Here is the code. Did I leave out anything?

 

#pragma optimize("g", off )

// core 0 comes here to get addresses of arrays for other cores

 

void preparederivmap( int &npas ) // create mapping of data for other cores

{

int size = 15001*412 + 128;

 

TCHAR derivfilename[]= TEXT("SYNOPSYS_DERIV_DATA");

 

hMapping = CreateFileMapping( NULL ,nullptr, PAGE_READWRITE, 0, (size*sizeof(double)), derivfilename );

if (hMapping == NULL ) {

panic( "Cannot open mapping file" );

}

 

double *deriv = static_cast<double*> (MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0 ));

if ( !deriv ) {

panic( "Cannot do MapView" );

}

pderiv = deriv;

 

size = 401;

TCHAR delqfilename[]= TEXT("SYNOPSYS_DELQ_DATA");

 

hMapping2 = CreateFileMapping( NULL ,nullptr, PAGE_READWRITE, 0, (size*sizeof(double)), delqfilename );

if (hMapping2 == NULL ) {

panic( "Cannot open mapping file" );

}

 

double *delq = static_cast<double*> (MapViewOfFile(hMapping2, FILE_MAP_ALL_ACCESS, 0, 0, 0 ));

if ( !delq ) {

panic( "Cannot do MapView" );

}

pdelq = delq;

 

TCHAR scdrfilename[]= TEXT("SYNOPSYS_SCDR_DATA");

 

hMapping3 = CreateFileMapping( NULL ,nullptr, PAGE_READWRITE, 0, (size*sizeof(double)), scdrfilename );

if (hMapping3 == NULL ) {

panic( "Cannot open mapping file" );

}

 

double *scdr = static_cast<double*> (MapViewOfFile(hMapping3, FILE_MAP_ALL_ACCESS, 0, 0, 0 ));

if ( !scdr ) {

panic( "Cannot do MapView" );

}

pscdr = scdr;

 

SYNORUN( deriv, delq, scdr, &npas ); // returns only when all passes are done

return;

}

 

 

void killderivmap( ) // delete mapping of data for other cores

{

 

UnmapViewOfFile( pderiv );

UnmapViewOfFile( pdelq );

UnmapViewOfFile( pscdr );

 

CloseHandle( hMapping );

CloseHandle( hMapping2 );

CloseHandle( hMapping3 );

 

}

 

Continue reading...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...