INET MANET undisposed object

298 views
Skip to first unread message

LIN Peng

unread,
Mar 1, 2011, 1:23:53 AM3/1/11
to omn...@googlegroups.com
Dear all,
 
I noticed that almost every example simulation ends with notification of "undisposed object--........check module destructor",
means that some objects created dynamically may not be destructed properly....
In earlier version of INETmanet I didn't have such notification.
 
What will you do with such situation? 
 
thanks
 
L.P.

Krishna Oza

unread,
Dec 18, 2012, 4:36:09 AM12/18/12
to omn...@googlegroups.com, stli...@gmail.com
i got the same error saying std::bad_alloc can any one just help letting me know where this error occurs and why. I can then debug. Pls help

Rudolf Hornig

unread,
Dec 18, 2012, 4:46:30 AM12/18/12
to omn...@googlegroups.com, stli...@gmail.com
Out of memory... And can happen anywhere where you allocate memory.
Message has been deleted

Adriana V R

unread,
May 12, 2016, 8:53:45 AM5/12/16
to OMNeT++ Users, stli...@gmail.com
Would this undermine the simulation's run? Here normally runs but it appears at the end. How can I fix it?
The result:

undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor
undisposed object: (cMessage) Wireless.wirelessHost1.udpApp. -- check module destructor

End.


The UDP App:

#include "inet/applications/udpapp/UDPMasterCli.h"


#include "inet/transportlayer/contract/udp/UDPControlInfo_m.h"
#include "inet/networklayer/common/L3AddressResolver.h"


namespace inet {


Define_Module(UDPMasterCli);


simsignal_t
UDPMasterCli::rcvdPkSignal = registerSignal("rcvdPk");


void UDPMasterCli::initialize(int stage)
{
   
ApplicationBase::initialize(stage);


   
if (stage == INITSTAGE_LOCAL) {
       
int localPort = par("localPort");
        socket
.setOutputGate(gate("udpOut"));
        socket
.bind(localPort);
        selfMsg
= new cMessage("UDPStartClient");
   
}
}


void UDPMasterCli::finish()
{
   
ApplicationBase::finish();
}


void UDPMasterCli::handleMessageWhenUp(cMessage *msg)
{
   
if (msg->isSelfMessage()) {
        requestStream
();
        scheduleAt
(simTime() + exponential(1.0), new cMessage);
   
}
   
else if (msg->getKind() == UDP_I_DATA) {
       
// process incoming packet
        receiveStream
(check_and_cast<CCNPacket *>(msg));
   
}
   
else if (msg->getKind() == UDP_I_ERROR) {
        EV_WARN
<< "Ignoring UDP error report\n";
       
delete msg;
   
}
   
else {
       
throw cRuntimeError("Unrecognized message (%s)%s", msg->getClassName(), msg->getName());
   
}
}


void UDPMasterCli::requestStream()
{
   
int svrPort = par("serverPort");
   
const char *address = par("serverAddress");
    L3Address svrAddr
= L3AddressResolver().resolve(address);


    L3Address srcAddr
= L3AddressResolver().resolve(getParentModule()->getFullName());


   
if (svrAddr.isUnspecified()) {
        EV_ERROR
<< "Server address is unspecified, skip sending video stream request\n";
       
return;
   
}

    srand
(time(NULL));
   
int isInterest = rand() % 2;


    std::ostringstream str;
    str
<< rand() % 10;
    name
= "CCNPacket-" + str.str();
   
CCNPacket *CCNPk = new CCNPacket();
   
CCNPk->setName(name.c_str());
   
CCNPk->setPart(1);
   
CCNPk->setSrcAddress(srcAddr);
   
if (isInterest == 1)
       
CCNPk->setIsInterest(true);
   
else
       
CCNPk->setIsInterest(false);


   
CCNPk->setContent("CCN Packet");


    EV_INFO
<< "CCN Packet. Name " << CCNPk->getName() <<"Part" << CCNPk->getPart() << "Is interest?" << CCNPk->getIsInterest() << endl;


   
CCNPk->setByteLength(1);


    socket
.sendTo(CCNPk, svrAddr, svrPort);


}


void UDPMasterCli::receiveStream(CCNPacket *CCNPk)
{
   
//CCNPacket *CCNPk = check_and_cast<CCNPacket *>(msg);
    EV_INFO
<< "Pacote de dados enviado pelo servidor: " << CCNPk->getName() << "\n";
   
delete CCNPk;
}


bool UDPMasterCli::handleNodeStart(IDoneCallback *doneCallback)
{
    simtime_t startTimePar
= par("startTime");
    simtime_t startTime
= std::max(startTimePar, simTime());
    scheduleAt
(startTime, selfMsg);
   
return true;
}


bool UDPMasterCli::handleNodeShutdown(IDoneCallback *doneCallback)
{
    cancelEvent
(selfMsg);
   
//TODO if(socket.isOpened()) socket.close();
   
return true;
}


void UDPMasterCli::handleNodeCrash()
{
    cancelEvent
(selfMsg);
}


} // namespace inet


Rudolf Hornig

unread,
May 12, 2016, 10:32:39 AM5/12/16
to OMNeT++ Users, stli...@gmail.com
This is a memory leak. Bigger simulations will fill the memory and crash.

    if (msg->isSelfMessage()) {
        requestStream
();
        scheduleAt
(simTime() + exponential(1.0), new cMessage);
    
}

check the bold part. You are creating a new self message in response to each incoming self message while you did not delete the original one. Probably it would be better to re-schedule the current self message instead of the creating a new message.

Adriana V R

unread,
May 13, 2016, 8:42:36 PM5/13/16
to OMNeT++ Users, stli...@gmail.com
Thank you very much! I changed and the simulation is ending normally.

    if (msg->isSelfMessage()) {
        requestStream
();
        scheduleAt
(simTime() + exponential(1.0), msg);
   
}
Reply all
Reply to author
Forward
0 new messages