bool transmitting = FALSE;
uint8_t sendingLength = 0;
int destNode;
+ sim_event_t sendEvent;
message_t receiveBuffer;
command error_t Init.init() {
dbg("TossimPacketModelC", "TossimPacketModelC: Init.init() called\n");
initialized = TRUE;
+ // We need to cancel in case an event is still lying around in the queue from
+ // before a reboot. Otherwise, the event will be executed normally (node is on),
+ // but its memory has been zeroed out.
+ sendEvent.cancelled = 1;
return SUCCESS;
}
return SUCCESS;
}
- sim_event_t sendEvent;
void send_backoff(sim_event_t* evt);
void send_transmit(sim_event_t* evt);
void send_transmit_done(sim_event_t* evt);
sim_set_time(event->time);
sim_set_node(event->mote);
- dbg("Tossim", "CORE: popping event for %i at %llu... ", sim_node(), sim_time());
- if (sim_mote_is_on(event->mote) || event->force) {
+ // Need to test whether function pointers are for statically
+ // allocted events that are zeroed out on reboot
+ dbg("Tossim", "CORE: popping event 0x%p for %i at %llu with handler %p... ", event, sim_node(), sim_time(), event->handle);
+ if ((sim_mote_is_on(event->mote) || event->force) &&
+ event->handle != NULL) {
result = TRUE;
dbg_clear("Tossim", " mote is on (or forced event), run it.\n");
event->handle(event);
else {
dbg_clear("Tossim", "\n");
}
- event->cleanup(event);
+ if (event->cleanup != NULL) {
+ event->cleanup(event);
+ }
}
return result;