From: scipio Date: Fri, 15 Jun 2007 00:45:18 +0000 (+0000) Subject: Check function pointers. X-Git-Tag: release_tools_1_2_4_1~117 X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=commitdiff_plain;h=6f7715f3c62f5b96850b5c08c0d78ec16d74919b;p=tinyos-2.x.git Check function pointers. --- diff --git a/tos/lib/tossim/TossimPacketModelC.nc b/tos/lib/tossim/TossimPacketModelC.nc index 981c65fc..392682fb 100644 --- a/tos/lib/tossim/TossimPacketModelC.nc +++ b/tos/lib/tossim/TossimPacketModelC.nc @@ -67,6 +67,7 @@ implementation { bool transmitting = FALSE; uint8_t sendingLength = 0; int destNode; + sim_event_t sendEvent; message_t receiveBuffer; @@ -77,6 +78,10 @@ implementation { 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; } @@ -167,7 +172,6 @@ implementation { 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); diff --git a/tos/lib/tossim/sim_tossim.c b/tos/lib/tossim/sim_tossim.c index fb876ffb..92df410f 100644 --- a/tos/lib/tossim/sim_tossim.c +++ b/tos/lib/tossim/sim_tossim.c @@ -111,8 +111,11 @@ bool sim_run_next_event() __attribute__ ((C, spontaneous)) { 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); @@ -120,7 +123,9 @@ bool sim_run_next_event() __attribute__ ((C, spontaneous)) { else { dbg_clear("Tossim", "\n"); } - event->cleanup(event); + if (event->cleanup != NULL) { + event->cleanup(event); + } } return result;