From 5dcfccf5803510e9f4d2339b19dc617b4043153a Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Fri, 18 Oct 2013 11:37:58 +0000 Subject: [PATCH] clean up code and code for utilization --- .../gnunet-service-transport_neighbours.c | 226 ++---------------- 1 file changed, 24 insertions(+), 202 deletions(-) diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index dd598859f..5195c90cd 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -97,178 +97,6 @@ */ #define UTIL_TRANSMISSION_INTERVAL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1) -#define DEBUG_MALLOC GNUNET_NO - -#if DEBUG_MALLOC - -struct Allocator -{ - struct Allocator *prev; - struct Allocator *next; - - unsigned int bytes_alloced; - unsigned int max_alloced; - unsigned int diff; - unsigned int line; - - struct GNUNET_TIME_Absolute max_alloced_when; - struct GNUNET_TIME_Absolute last_alloced_when; - -}; - -struct Allocator *aehead; -struct Allocator *aetail; - -struct Allocation -{ - struct Allocation *prev; - struct Allocation *next; - - struct Allocator *alloc; - unsigned int bytes_alloced; - void *p; - unsigned int line; -}; - -struct Allocation *ahead; -struct Allocation *atail; - -static int bytes_alloced; - -static struct Allocator * -find_allocator (int line) -{ - struct Allocator *cur = aehead; - while (NULL != cur) - { - if (line == cur->line) - return cur; - cur = cur->next; - } - return cur; -} - -static void -print_allocators () -{ - static int start = GNUNET_YES; - static struct GNUNET_TIME_Absolute next; - static struct GNUNET_TIME_Relative rem; - struct Allocator *cur = aehead; - if (start) - { - next = GNUNET_TIME_UNIT_ZERO_ABS; - start = GNUNET_NO; - } - if (0 == (rem = GNUNET_TIME_absolute_get_remaining(next)).rel_value_us) - { - fprintf (stderr, "Allocated in `%s' total: %5u bytes\n", __FILE__, bytes_alloced); - while (NULL != cur) - { - char *last_alloc = GNUNET_strdup (GNUNET_STRINGS_absolute_time_to_string(cur->max_alloced_when)); - fprintf (stderr, "Allocated from line %4u :%5u bytes (diff %5i bytes, max alloc: %5u @ %s, last alloc %s)\n", - cur->line, cur->bytes_alloced, cur->diff, cur->max_alloced, - last_alloc, - GNUNET_STRINGS_absolute_time_to_string(cur->last_alloced_when)); - GNUNET_free (last_alloc); - cur->diff = 0; - cur = cur->next; - } - fprintf (stderr, "\n"); - next = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), GNUNET_TIME_UNIT_SECONDS); - } -} - -#endif - -static void -MEMDEBUG_add_alloc (void *p, size_t size, int line) -{ -#if DEBUG_MALLOC - struct Allocation *alloc = GNUNET_malloc (sizeof (struct Allocation)); - struct Allocator *allocator = find_allocator(line); - if (NULL == allocator) - { - allocator = GNUNET_malloc (sizeof (struct Allocator)); - allocator->line = line; - GNUNET_CONTAINER_DLL_insert (aehead, aetail, allocator); - } - alloc->alloc = allocator; - alloc->p = p; - alloc->line = line; - alloc->bytes_alloced = size; - allocator->bytes_alloced += size; - allocator->last_alloced_when = GNUNET_TIME_absolute_get(); - if (allocator->bytes_alloced >= allocator->max_alloced) - { - allocator->max_alloced = allocator->bytes_alloced; - allocator->max_alloced_when = allocator->last_alloced_when; - } - allocator->diff += size; - GNUNET_CONTAINER_DLL_insert (ahead, atail, alloc); - print_allocators (); - bytes_alloced += size; -#endif -} - - -static void * -MEMDEBUG_malloc (size_t size, int line) -{ - void * ret; - - ret = GNUNET_malloc (size); -#if DEBUG_MALLOC - if (NULL != ret) - MEMDEBUG_add_alloc (ret, size, line); -#endif - return ret; - -} - -static void -MEMDEBUG_free (void * alloc, int line) -{ -#if DEBUG_MALLOC - struct Allocation *cur; - struct Allocator *allocator; - cur = ahead; - while (NULL != cur) - { - if (alloc == cur->p) - break; - cur = cur->next; - } - if (NULL == cur) - { - fprintf (stderr, "Unmonitored free from line %4u\n", line); - GNUNET_break (0); - return; - } - allocator = cur->alloc; - if (NULL == allocator) - { - GNUNET_break (0); - } - GNUNET_CONTAINER_DLL_remove (ahead, atail, cur); - allocator->bytes_alloced -= cur->bytes_alloced; - allocator->diff -= cur->bytes_alloced; - GNUNET_assert (allocator->bytes_alloced >= 0); - bytes_alloced -= cur->bytes_alloced; - GNUNET_assert (bytes_alloced >= 0); - GNUNET_free (cur); -#endif - GNUNET_free (alloc); -} - -static void -MEMDEBUG_free_non_null (void * alloc, int line) -{ - if (alloc != NULL) - MEMDEBUG_free (alloc, line); -} - - GNUNET_NETWORK_STRUCT_BEGIN /** @@ -712,12 +540,12 @@ struct NeighbourMapEntry /** * Tracking utilization of outbound bandwidth */ - unsigned int util_bytes_sent; + uint32_t util_bytes_sent; /** * Tracking utilization of inbound bandwidth */ - unsigned int util_bytes_recv; + uint32_t util_bytes_recv; /** @@ -950,8 +778,7 @@ free_address (struct NeighbourAddress *na) na->ats_active = GNUNET_NO; if (NULL != na->address) { - MEMDEBUG_free (na->address, __LINE__); - //GNUNET_HELLO_address_free (na->address); + GNUNET_HELLO_address_free (na->address); na->address = NULL; } na->session = NULL; @@ -1016,7 +843,6 @@ set_address (struct NeighbourAddress *na, return; } na->address = GNUNET_HELLO_address_copy (address); - MEMDEBUG_add_alloc (na->address, GNUNET_HELLO_address_get_size (na->address), __LINE__); na->bandwidth_in = bandwidth_in; na->bandwidth_out = bandwidth_out; na->session = session; @@ -1056,7 +882,7 @@ free_neighbour (struct NeighbourMapEntry *n, int keep_sessions) GNUNET_CONTAINER_DLL_remove (n->messages_head, n->messages_tail, mq); if (NULL != mq->cont) mq->cont (mq->cont_cls, GNUNET_SYSERR, mq->message_buf_size, 0); - MEMDEBUG_free (mq, __LINE__); + GNUNET_free (mq); } /* It is too late to send other peer disconnect notifications, but at least internally we need to get clean... */ @@ -1074,7 +900,6 @@ free_neighbour (struct NeighbourMapEntry *n, int keep_sessions) if (NULL != n->primary_address.address) { backup_primary = GNUNET_HELLO_address_copy(n->primary_address.address); - MEMDEBUG_add_alloc (backup_primary, GNUNET_HELLO_address_get_size(backup_primary), __LINE__); } else backup_primary = NULL; @@ -1099,7 +924,7 @@ free_neighbour (struct NeighbourMapEntry *n, int keep_sessions) (NULL != (papi = GST_plugins_find (backup_primary->transport_name)))) papi->disconnect (papi->cls, &n->id); - MEMDEBUG_free_non_null (backup_primary, __LINE__); + GNUNET_free_non_null (backup_primary); GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multipeermap_remove (neighbours, @@ -1121,7 +946,7 @@ free_neighbour (struct NeighbourMapEntry *n, int keep_sessions) n->task = GNUNET_SCHEDULER_NO_TASK; } /* free rest of memory */ - MEMDEBUG_free (n, __LINE__); + GNUNET_free (n); } /** @@ -1341,7 +1166,7 @@ transmit_send_continuation (void *cls, if (NULL == (n = lookup_neighbour (receiver))) { - MEMDEBUG_free (mq, __LINE__); + GNUNET_free (mq); return; /* disconnect or other error while transmitting, can happen */ } if (n->is_active == mq) @@ -1390,7 +1215,7 @@ transmit_send_continuation (void *cls, (success == GNUNET_OK) ? "success" : "FAILURE"); if (NULL != mq->cont) mq->cont (mq->cont_cls, success, size_payload, physical); - MEMDEBUG_free (mq, __LINE__); + GNUNET_free (mq); } @@ -1708,7 +1533,7 @@ GST_neighbours_send (const struct GNUNET_PeerIdentity *target, const void *msg, gettext_noop ("# bytes in message queue for other peers"), bytes_in_send_queue, GNUNET_NO); - mq = MEMDEBUG_malloc (sizeof (struct MessageQueue) + msg_size, __LINE__); + mq = GNUNET_malloc (sizeof (struct MessageQueue) + msg_size); mq->cont = cont; mq->cont_cls = cont_cls; memcpy (&mq[1], msg, msg_size); @@ -1818,7 +1643,7 @@ setup_neighbour (const struct GNUNET_PeerIdentity *peer) GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating new neighbour entry for `%s'\n", GNUNET_i2s (peer)); - n = MEMDEBUG_malloc (sizeof (struct NeighbourMapEntry), __LINE__); + n = GNUNET_malloc (sizeof (struct NeighbourMapEntry)); n->id = *peer; n->state = S_NOT_CONNECTED; n->latency = GNUNET_TIME_UNIT_FOREVER_REL; @@ -2157,12 +1982,11 @@ handle_test_blacklist_cont (void *cls, break; } cleanup: - MEMDEBUG_free (bcc->na.address, __LINE__); - //GNUNET_HELLO_address_free (bcc->na.address); + GNUNET_HELLO_address_free (bcc->na.address); GNUNET_CONTAINER_DLL_remove (bc_head, bc_tail, bcc); - MEMDEBUG_free (bcc, __LINE__); + GNUNET_free (bcc); } @@ -2185,10 +2009,8 @@ check_blacklist (const struct GNUNET_PeerIdentity *peer, struct BlackListCheckContext *bcc; struct GST_BlacklistCheck *bc; - bcc = - MEMDEBUG_malloc (sizeof (struct BlackListCheckContext), __LINE__); + bcc = GNUNET_malloc (sizeof (struct BlackListCheckContext)); bcc->na.address = GNUNET_HELLO_address_copy (address); - MEMDEBUG_add_alloc (bcc->na.address, GNUNET_HELLO_address_get_size (address), __LINE__); bcc->na.session = session; bcc->na.connect_timestamp = ts; GNUNET_CONTAINER_DLL_insert (bc_head, @@ -2352,8 +2174,6 @@ GST_neighbours_switch_to_address (const struct GNUNET_PeerIdentity *peer, if (NULL == (papi = GST_plugins_find (address->transport_name))) { /* we don't have the plugin for this address */ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "2348 : `%s' \n", address->transport_name); GNUNET_ATS_address_destroyed (GST_ats, address, NULL); return; } @@ -2544,7 +2364,7 @@ GST_neighbours_switch_to_address (const struct GNUNET_PeerIdentity *peer, } static int -util_it (void *cls, +send_utilization_data (void *cls, const struct GNUNET_PeerIdentity *key, void *value) { @@ -2557,12 +2377,15 @@ util_it (void *cls, delta = GNUNET_TIME_absolute_get_difference(n->last_util_transmission, GNUNET_TIME_absolute_get()); bps_in = 0; if (0 != n->util_bytes_recv) - bps_in = ((1000 * 1000) * n->util_bytes_recv) / (delta.rel_value_us); + bps_in = (1000LL * 1000LL * n->util_bytes_recv) / (delta.rel_value_us); bps_out = 0; if (0 != n->util_bytes_sent) - bps_out = ((1000 * 1000) * n->util_bytes_sent) / (delta.rel_value_us); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "`%s': Bytes sent: %u recv %u in %llu sec.\n", - GNUNET_i2s (key), bps_out, bps_in, delta.rel_value_us / (1000 * 1000)); + bps_out = (1000LL * 1000LL * n->util_bytes_sent) / delta.rel_value_us; + + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "`%s'received %u Bytes/s, sent %u Bytes/s \n", + GNUNET_i2s (key), bps_in, bps_out); + + atsi[0].type = htonl (GNUNET_ATS_UTILIZATION_UP); atsi[0].value = htonl (bps_out); atsi[1].type = htonl (GNUNET_ATS_UTILIZATION_DOWN); @@ -2588,7 +2411,7 @@ utilization_transmission (void *cls, util_transmission_tk = GNUNET_SCHEDULER_NO_TASK; if (0 < GNUNET_CONTAINER_multipeermap_size (neighbours)) - GNUNET_CONTAINER_multipeermap_iterate (neighbours, util_it, NULL); + GNUNET_CONTAINER_multipeermap_iterate (neighbours, send_utilization_data, NULL); util_transmission_tk = GNUNET_SCHEDULER_add_delayed (UTIL_TRANSMISSION_INTERVAL, utilization_transmission, NULL); @@ -3000,12 +2823,11 @@ GST_neighbours_session_terminated (const struct GNUNET_PeerIdentity *peer, if (bcc->na.session == session) { GST_blacklist_test_cancel (bcc->bc); - MEMDEBUG_free (bcc->na.address, __LINE__); - //GNUNET_HELLO_address_free (bcc->na.address); + GNUNET_HELLO_address_free (bcc->na.address); GNUNET_CONTAINER_DLL_remove (bc_head, bc_tail, bcc); - MEMDEBUG_free (bcc, __LINE__); + GNUNET_free (bcc); } } if (NULL == (n = lookup_neighbour (peer))) -- 2.25.1