@@ -23,19 +23,15 @@ void ActivePacketSource::initialize(int stage)
2323 }
2424 else if (stage == INITSTAGE_QUEUEING ) {
2525 checkPacketOperationSupport (outputGate);
26- if (!productionTimer->isScheduled ())
26+ if (productionTimer != nullptr && !productionTimer->isScheduled ())
2727 scheduleProductionTimerAndProducePacket ();
2828 }
2929}
3030
3131void ActivePacketSource::handleMessage (cMessage *message)
3232{
33- if (message == productionTimer) {
34- if (consumer == nullptr || consumer.canPushSomePacket ()) {
35- scheduleProductionTimer (productionIntervalParameter->doubleValue ());
36- producePacket ();
37- }
38- }
33+ if (message == productionTimer)
34+ scheduleProductionTimerAndProducePacket ();
3935 else
4036 throw cRuntimeError (" Unknown message" );
4137}
@@ -56,12 +52,19 @@ void ActivePacketSource::scheduleProductionTimer(clocktime_t delay)
5652
5753void ActivePacketSource::scheduleProductionTimerAndProducePacket ()
5854{
59- if (!initialProductionOffsetScheduled && initialProductionOffset >= CLOCKTIME_ZERO ) {
60- scheduleProductionTimer (initialProductionOffset);
55+ if (!initialProductionOffsetScheduled && initialProductionOffset >= 0 ) {
56+ if (std::isfinite (initialProductionOffset))
57+ scheduleProductionTimer (initialProductionOffset);
6158 initialProductionOffsetScheduled = true ;
6259 }
6360 else if (consumer == nullptr || consumer.canPushSomePacket ()) {
64- scheduleProductionTimer (productionIntervalParameter->doubleValue ());
61+ double interval = productionIntervalParameter->doubleValue ();
62+ if (std::isfinite (interval))
63+ scheduleProductionTimer (interval);
64+ else {
65+ cancelAndDelete (productionTimer);
66+ productionTimer = nullptr ;
67+ }
6568 producePacket ();
6669 }
6770}
@@ -77,7 +80,7 @@ void ActivePacketSource::producePacket()
7780void ActivePacketSource::handleCanPushPacketChanged (const cGate *gate)
7881{
7982 Enter_Method (" handleCanPushPacketChanged" );
80- if (!productionTimer->isScheduled ())
83+ if (productionTimer != nullptr && !productionTimer->isScheduled ())
8184 scheduleProductionTimerAndProducePacket ();
8285}
8386
0 commit comments