Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] SIGSEGV on MPI_Test
From: devendra rai (dev641_at_[hidden])
Date: 2012-01-12 11:39:07

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 <dev641_at_[hidden]> To: Open MPI Users <users_at_[hidden]> 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 users_at_[hidden]