Hello All,

Continuing my previous mail, I thought attaching this debugger screenshot may 
help anyone come up with an explanation. The exact location where the segfault 
happens is also highlighted.

Thanks a lot for any help.

Best,

Devendra



________________________________
 From: devendra rai <dev...@yahoo.co.uk>
To: Open MPI Users <us...@open-mpi.org> 
Sent: Thursday, 12 January 2012, 17:05
Subject: [OMPI users] SIGSEGV on MPI_Test
 

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 

_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users

Reply via email to