%description: Tests that a handleMessage() module can delete itself, and execution of that module stops immediately. Simulation of other modules continue. Scheduled events for deleted simple module are discarded. %file: {}.ned simple {Node} endsimple simple {Suicide} endsimple module {Net} submodules: node: {Node}; suicide: {Suicide}; endmodule network {network} : {Net}; endnetwork %file: {}.cc #include class {Node} : public cSimpleModule { Module_Class_Members({Node},cSimpleModule,16384) virtual void activity(); }; Define_Module({Node}); void {Node}::activity() { for (int i=0; i<5; i++) { bool exists = (parentModule()->submodule("suicide") != NULL); ev << "t=" << simTime() << ": exists=" << exists << endl; wait(1); } } class {Suicide} : public cSimpleModule { Module_Class_Members({Suicide},cSimpleModule,0); virtual void initialize(); virtual void handleMessage(cMessage *msg); }; Define_Module({Suicide}); void {Suicide}::initialize() { scheduleAt(1.0, new cMessage("msg")); } void {Suicide}::handleMessage(cMessage *msg) { scheduleAt(simTime()+1.0, msg); ev << "before deleteModule\n"; deleteModule(); ev << "after deleteModule\n"; } %inifile: {}.ini [General] network={network} [Cmdenv] event-banners=no %contains: stdout t=0: exists=1 before deleteModule t=1: exists=0 t=2: exists=0 t=3: exists=0 t=4: exists=0 %not-contains: stdout after deleteModule