diff --git a/core/net/mac/csma.c b/core/net/mac/csma.c index e2776e35d..b8fa3c9a2 100644 --- a/core/net/mac/csma.c +++ b/core/net/mac/csma.c @@ -244,9 +244,7 @@ packet_sent(void *ptr, int status, int num_transmissions) /* This is needed to correctly attribute energy that we spent transmitting this packet. */ - q = list_head(queued_packet_list); - queuebuf_free(q->buf); - q->buf = queuebuf_new_from_packetbuf(); + queuebuf_update_attr_from_packetbuf(q->buf); } else { PRINTF("csma: drop with status %d after %d transmissions, %d collisions\n", diff --git a/core/net/queuebuf.c b/core/net/queuebuf.c index ca5988f7d..3a6bdbf10 100644 --- a/core/net/queuebuf.c +++ b/core/net/queuebuf.c @@ -163,6 +163,12 @@ queuebuf_new_from_packetbuf(void) } /*---------------------------------------------------------------------------*/ void +queuebuf_update_attr_from_packetbuf(struct queuebuf *buf) +{ + packetbuf_attr_copyto(buf->attrs, buf->addrs); +} +/*---------------------------------------------------------------------------*/ +void queuebuf_free(struct queuebuf *buf) { if(memb_inmemb(&bufmem, buf)) { diff --git a/core/net/queuebuf.h b/core/net/queuebuf.h index 92c4b9148..f9d434100 100644 --- a/core/net/queuebuf.h +++ b/core/net/queuebuf.h @@ -78,6 +78,7 @@ struct queuebuf *queuebuf_new_from_packetbuf_debug(const char *file, int line); #else /* QUEUEBUF_DEBUG */ struct queuebuf *queuebuf_new_from_packetbuf(void); #endif /* QUEUEBUF_DEBUG */ +void queuebuf_update_attr_from_packetbuf(struct queuebuf *b); void queuebuf_to_packetbuf(struct queuebuf *b); void queuebuf_free(struct queuebuf *b);