It is possible that packetbuf is modified by the call to
mac_call_sent_callback. If this occurs ContikiMAC will not be able to
recognize that a packet is pending.

This fixes this problem by storing pending status in a local variable before
calling mac_call_sent_callback.
This commit is contained in:
Billy Kozak 2015-07-14 07:53:10 -06:00
parent 552408b241
commit 32e668ae2a

View File

@ -805,6 +805,7 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list)
struct rdc_buf_list *next;
int ret;
int is_receiver_awake;
int pending;
if(buf_list == NULL) {
return;
@ -849,7 +850,9 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list)
/* Prepare the packetbuf */
queuebuf_to_packetbuf(curr->buf);
pending = packetbuf_attr(PACKETBUF_ATTR_PENDING);
/* Send the current packet */
ret = send_packet(sent, ptr, curr, is_receiver_awake);
if(ret != MAC_TX_DEFERRED) {
@ -866,7 +869,7 @@ qsend_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list)
/* The transmission failed, we stop the burst */
next = NULL;
}
} while((next != NULL) && packetbuf_attr(PACKETBUF_ATTR_PENDING));
} while((next != NULL) && pending);
}
/*---------------------------------------------------------------------------*/
/* Timer callback triggered when receiving a burst, after having