Hello Community:
I am running into a strange problem. I get a SIGSEGV when I try to execute
MPI_Test:
==21076== Process terminating with default action of signal 11 (SIGSEGV)
==21076== Bad permissions for mapped region at address 0x43AEE1
==21076== at 0x509B957: ompi_request_default_test (req_test.c:68)
==21076== by 0x50EDEBB: PMPI_Test (ptest.c:59)
==21076== by 0x44210D: InterProcessorTransmit::StartTransmission()
(InterProcessorTransmit.cpp:111)
Here is the relevant piece of code:
for ( this->dbIterator = localdb.begin( ) ; this->dbIterator !=
localdb.end( ); this->dbIterator++)
{
this->TransmissionDetails = (this->dbIterator)->second;
SendComplete = 0;
UniqueIDtoSendto = std::get<0>(this->TransmissionDetails);
RecepientNode = (this->dbIterator)->first;
Isend_request = MPI::COMM_WORLD.Issend(this->transmitbuffer,
this->transmissionsize, MPI_BYTE, (this->dbIterator)->first,
std::get<0>(this->TransmissionDetails));
/*This is line 111 */MPI_Test(&(this->Isend_request), &(this->SendComplete),
&(this->ISend_status));
while(!this->SendComplete)
{
/* Test whether the transmission was okay*/
MPI_Test(&(this->Isend_request), &(this->SendComplete),
&(this->ISend_status));
/**** see if we need to pause or stop ****/
{
/* The mutex is released after exiting this
block */
std::unique_lock<std::mutex>
pr_dblock(this->mutexforPauseResume);
while(this->pause==1)
{
/* pause till resume signal is received */
this->WaitingforResume.wait(pr_dblock);
}
if(this->stop == 1)
{
/* stop this transmission */
return(0);
}
/* mutex is released here */
}
/**** End of pause/ stop check ****/
Am I missing something here? The piece of code shown here runs in a thread.
Thanks a lot for any pointers.
Best
Devendra