No, wait, never mind... should have had more coffee. m_data is already a module level variable... *slaps forehead*
> -----Original Message----- > From: Michiel Konstapel > Sent: donderdag 26 augustus 2010 12:17 > To: [email protected] > Subject: HdlcTranslateC, SerialActiveMessageC > > While digging through the SerialActiveMessageC stack, I came across the > following in HdlcTranslateC: > > async command error_t SerialFrameComm.putDelimiter() { > state.sendEscape = 0; > m_data = HDLC_FLAG_BYTE; > return call UartStream.send(&m_data, 1); > } > > This allocated a variable on the stack, then passes a pointer to it to > UartStream (PlatformSerialC) and returns. The same construct is used in > putData() and sendDone(). > > Is this not likely to break if the callee copies the pointer, but > doesn't get to read the data before the stack location is overwritten? > It looks like that could easily happen if an interrupt occurs. > > An easy fix would be to allocate a module level, one byte buffer in > HdlcTranslateC and use that to pass the byte, perhaps guarded by a busy > flag. > > Regards, > Michiel _______________________________________________ Tinyos-help mailing list [email protected] https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
