diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2014-03-07 15:21:05 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2014-03-07 15:21:05 +0000 |
commit | cbeb17e103ce6bac1f0b6068e65dd048041903fb (patch) | |
tree | 7c9db345911a05ebbea090196b1bca46cee6e93f /src/testbed | |
parent | 911ca764e31f74c8f9365dd736c7ae87eb52fa7c (diff) | |
download | gnunet-cbeb17e103ce6bac1f0b6068e65dd048041903fb.tar.gz gnunet-cbeb17e103ce6bac1f0b6068e65dd048041903fb.zip |
- Warn upon deleting unsent message.
- Send the message immediately if its size equals to the buffer size.
Diffstat (limited to 'src/testbed')
-rw-r--r-- | src/testbed/testbed_logger_api.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/testbed/testbed_logger_api.c b/src/testbed/testbed_logger_api.c index df1fcf27b..dab9d6600 100644 --- a/src/testbed/testbed_logger_api.c +++ b/src/testbed/testbed_logger_api.c | |||
@@ -352,15 +352,21 @@ void | |||
352 | GNUNET_TESTBED_LOGGER_disconnect (struct GNUNET_TESTBED_LOGGER_Handle *h) | 352 | GNUNET_TESTBED_LOGGER_disconnect (struct GNUNET_TESTBED_LOGGER_Handle *h) |
353 | { | 353 | { |
354 | struct MessageQueue *mq; | 354 | struct MessageQueue *mq; |
355 | unsigned int lost; | ||
355 | 356 | ||
356 | if (GNUNET_SCHEDULER_NO_TASK != h->flush_completion_task) | 357 | if (GNUNET_SCHEDULER_NO_TASK != h->flush_completion_task) |
357 | GNUNET_SCHEDULER_cancel (h->flush_completion_task); | 358 | GNUNET_SCHEDULER_cancel (h->flush_completion_task); |
359 | lost = 0; | ||
358 | while (NULL != (mq = h->mq_head)) | 360 | while (NULL != (mq = h->mq_head)) |
359 | { | 361 | { |
360 | GNUNET_CONTAINER_DLL_remove (h->mq_head, h->mq_tail, mq); | 362 | GNUNET_CONTAINER_DLL_remove (h->mq_head, h->mq_tail, mq); |
361 | GNUNET_free (mq->msg); | 363 | GNUNET_free (mq->msg); |
362 | GNUNET_free (mq); | 364 | GNUNET_free (mq); |
365 | lost++; | ||
363 | } | 366 | } |
367 | if (0 != lost) | ||
368 | LOG (GNUNET_ERROR_TYPE_WARNING, "Cleaning up %u unsent logger message[s]\n", | ||
369 | lost); | ||
364 | GNUNET_CLIENT_disconnect (h->client); | 370 | GNUNET_CLIENT_disconnect (h->client); |
365 | GNUNET_free (h); | 371 | GNUNET_free (h); |
366 | } | 372 | } |
@@ -383,7 +389,7 @@ GNUNET_TESTBED_LOGGER_write (struct GNUNET_TESTBED_LOGGER_Handle *h, | |||
383 | 389 | ||
384 | GNUNET_assert (0 != size); | 390 | GNUNET_assert (0 != size); |
385 | GNUNET_assert (NULL != data); | 391 | GNUNET_assert (NULL != data); |
386 | GNUNET_assert (size < (BUFFER_SIZE - sizeof (struct GNUNET_MessageHeader))); | 392 | GNUNET_assert (size <= (BUFFER_SIZE - sizeof (struct GNUNET_MessageHeader))); |
387 | fit_size = sizeof (struct GNUNET_MessageHeader) + h->bs + size; | 393 | fit_size = sizeof (struct GNUNET_MessageHeader) + h->bs + size; |
388 | if ( BUFFER_SIZE < fit_size ) | 394 | if ( BUFFER_SIZE < fit_size ) |
389 | dispatch_buffer (h); | 395 | dispatch_buffer (h); |
@@ -392,12 +398,15 @@ GNUNET_TESTBED_LOGGER_write (struct GNUNET_TESTBED_LOGGER_Handle *h, | |||
392 | h->buf = GNUNET_malloc (size); | 398 | h->buf = GNUNET_malloc (size); |
393 | h->bs = size; | 399 | h->bs = size; |
394 | memcpy (h->buf, data, size); | 400 | memcpy (h->buf, data, size); |
395 | return; | 401 | goto dispatch_ready; |
396 | } | 402 | } |
397 | h->buf = GNUNET_realloc (h->buf, h->bs + size); | 403 | h->buf = GNUNET_realloc (h->buf, h->bs + size); |
398 | memcpy (h->buf + h->bs, data, size); | 404 | memcpy (h->buf + h->bs, data, size); |
399 | h->bs += size; | 405 | h->bs += size; |
400 | return; | 406 | |
407 | dispatch_ready: | ||
408 | if (BUFFER_SIZE == fit_size) | ||
409 | dispatch_buffer (h); | ||
401 | } | 410 | } |
402 | 411 | ||
403 | 412 | ||