Merge pull request #3089 from authmillenon/pktbuf/enh/debug-output

ng_pktbuf: add DEBUG output
This commit is contained in:
Martine Lenders 2015-06-02 21:20:14 +02:00
commit aa3452063d

View File

@ -46,10 +46,13 @@ int ng_pktbuf_realloc_data(ng_pktsnip_t *pkt, size_t size)
void *new;
if (pkt == NULL || !_pktbuf_internal_contains(pkt->data)) {
DEBUG("pktbuf: (pkt = %p) not in packet buffer\n", (void *)pkt);
return ENOENT;
}
if (pkt->users > 1 || pkt->next != NULL) {
DEBUG("pktbuf: more than one user (%u) or pkt->next != NULL (%p)\n",
pkt->users, (void *)pkt->next);
return EINVAL;
}
@ -60,6 +63,7 @@ int ng_pktbuf_realloc_data(ng_pktsnip_t *pkt, size_t size)
mutex_unlock(&_pktbuf_mutex);
if (new == NULL) {
DEBUG("pktbuf: no buffer space for realloc left\n");
return ENOMEM;
}
@ -92,6 +96,7 @@ void ng_pktbuf_hold(ng_pktsnip_t *pkt, unsigned int num)
mutex_lock(&_pktbuf_mutex);
while (pkt != NULL) {
DEBUG("pktbuf: hold (pkt = %p) %u times\n", (void *)pkt, num);
pkt->users += num;
pkt = pkt->next;
}
@ -109,15 +114,18 @@ void ng_pktbuf_release(ng_pktsnip_t *pkt)
while (pkt != NULL) {
if (pkt->users > 0) { /* Don't accidentally overshoot */
DEBUG("pktbuf: release (pkt = %p)\n", (void *)pkt);
pkt->users--;
}
if (pkt->users == 0) {
if (_pktbuf_internal_contains(pkt->data)) {
DEBUG("pktbuf: free pkt->data = %p\n", pkt->data);
_pktbuf_internal_free(pkt->data);
}
if (_pktbuf_internal_contains(pkt)) {
DEBUG("pktbuf: free pkt = %p\n", (void *)pkt);
_pktbuf_internal_free(pkt);
}
}
@ -135,7 +143,10 @@ ng_pktsnip_t *ng_pktbuf_start_write(ng_pktsnip_t *pkt)
mutex_lock(&_pktbuf_mutex);
DEBUG("pktbuf: pkt->users = %u => copy-on-write\n", pkt->users);
res = _pktbuf_duplicate(pkt);
DEBUG("pktbuf: copy-on-write result: (pkt = %p) copied to (res = %p)\n",
(void *)pkt, (void *)res);
pkt->users--;
@ -156,19 +167,26 @@ static ng_pktsnip_t *_pktbuf_alloc(size_t size)
ng_pktsnip_t *pkt;
pkt = (ng_pktsnip_t *)_pktbuf_internal_alloc(sizeof(ng_pktsnip_t));
DEBUG("pktbuf: allocated (pkt = %p) ", (void *)pkt);
if (pkt == NULL) {
DEBUG("=> failed\n");
return NULL;
}
DEBUG("of size %u\n", (unsigned)sizeof(ng_pktsnip_t));
pkt->data = _pktbuf_internal_alloc(size);
DEBUG("pktbuf: allocated (pkt->data = %p) ", pkt->data);
if (pkt->data == NULL) {
_pktbuf_internal_free(pkt);
DEBUG("=> failed (freeing %p)\n", (void *)pkt);
return NULL;
}
DEBUG("of size %u\n", (unsigned)size);
pkt->next = NULL;
pkt->size = size;
pkt->users = 1;
@ -182,62 +200,95 @@ static ng_pktsnip_t *_pktbuf_add_unsafe(ng_pktsnip_t *pkt, void *data,
ng_pktsnip_t *new_pktsnip;
new_pktsnip = (ng_pktsnip_t *)_pktbuf_internal_alloc(sizeof(ng_pktsnip_t));
DEBUG("pktbuf: allocated (new_pktsnip = %p) ", (void *)pkt);
if (new_pktsnip == NULL) {
DEBUG("=> failed\n");
return NULL;
}
DEBUG("of size %u\n", (unsigned)sizeof(ng_pktsnip_t));
if (pkt == NULL || pkt->data != data) {
if ((size != 0) && (!_pktbuf_internal_contains(data))) {
new_pktsnip->data = _pktbuf_internal_alloc(size);
DEBUG("pktbuf: allocated (new_pktsnip->data = %p) ", pkt->data);
if (new_pktsnip->data == NULL) {
_pktbuf_internal_free(new_pktsnip);
DEBUG("=> failed (freeing %p)\n", (void *)pkt);
return NULL;
}
DEBUG("of size %u\n", (unsigned)size);
if (data != NULL) {
DEBUG("pktbuf: copying %u byte from %p to %p\n", (unsigned)size,
data, new_pktsnip->data);
memcpy(new_pktsnip->data, data, size);
}
}
else {
if (_pktbuf_internal_contains(data)) {
DEBUG("pktbuf: Adding chunk to %p ", new_pktsnip->data);
if (!_pktbuf_internal_add_pkt(new_pktsnip->data)) {
_pktbuf_internal_free(new_pktsnip);
DEBUG("failed (freeing %p)\n", (void *)pkt);
return NULL;
}
DEBUG("successful\n");
}
new_pktsnip->data = data;
DEBUG("pktbuf: set new_pktsnip->data = %p\n", new_pktsnip->data);
}
new_pktsnip->next = NULL;
LL_PREPEND(pkt, new_pktsnip);
DEBUG("pktbuf: prepended new_pktsnip to pkt\n");
}
else {
if (size > pkt->size) {
DEBUG("pktbuf: new size (%u) out of pkt's boundaries (pkt->size = %u)",
(unsigned)size, (unsigned)pkt->size);
return NULL;
}
new_pktsnip->next = pkt->next;
new_pktsnip->data = data;
DEBUG("pktbuf: set new_pktsnip->data = %p\n", new_pktsnip->data);
DEBUG("pktbuf: add new_pktsnip (%p) to pkt (%p) after head\n",
(void *)new_pktsnip, (void *)pkt);
pkt->next = new_pktsnip;
pkt->size -= size;
DEBUG("pktbuf: resize pkt->size to %u\n", (unsigned)pkt->size);
pkt->data = (void *)(((uint8_t *)pkt->data) + size);
DEBUG("pktbuf: move pkt->data to %p\n", pkt->data);
DEBUG("pktbuf: Adding chunk to %p ", pkt->data);
if (!_pktbuf_internal_add_pkt(pkt->data)) {
DEBUG("failed (freeing %p)\n", (void *)new_pktsnip);
_pktbuf_internal_free(new_pktsnip);
return NULL;
}
DEBUG("successful\n");
}
new_pktsnip->size = size;
new_pktsnip->type = type;
new_pktsnip->users = 1;
DEBUG("pktbuf: summary of new snip %p: next = %p, data = %p, size = %u, "
"type = %d, users: %u\n", (void *)new_pktsnip, (void *)new_pktsnip->next,
new_pktsnip->data, (unsigned)new_pktsnip->size, new_pktsnip->type,
new_pktsnip->users);
return new_pktsnip;
}