From: Nathan S. Evans Date: Fri, 4 Feb 2011 15:42:45 +0000 (+0000) Subject: better memory usage, fix leak X-Git-Tag: initial-import-from-subversion-38251~19179 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=d4c2d46ce0ebf0003b1383c4bf7e62e28abaf85f;p=oweals%2Fgnunet.git better memory usage, fix leak --- diff --git a/src/transport/plugin_transport_unix.c b/src/transport/plugin_transport_unix.c index c5c26e443..790e4451f 100644 --- a/src/transport/plugin_transport_unix.c +++ b/src/transport/plugin_transport_unix.c @@ -487,7 +487,7 @@ unix_real_send (void *cls, ssize_t sent; const void *sb; size_t sbs; - struct sockaddr_un *un; + struct sockaddr_un un; size_t slen; if (send_handle == NULL) @@ -522,18 +522,18 @@ unix_real_send (void *cls, sizeof (struct GNUNET_PeerIdentity)); memcpy (&message[1], msgbuf, msgbuf_size); - un = GNUNET_malloc (sizeof (struct sockaddr_un)); - un->sun_family = AF_UNIX; + memset(&un, 0, sizeof(un)); + un.sun_family = AF_UNIX; slen = strlen (addr) + 1; sent = 0; - GNUNET_assert(slen < sizeof(un->sun_path)); - memcpy (un->sun_path, addr, slen); - un->sun_path[slen] = '\0'; + GNUNET_assert(slen < sizeof(un.sun_path)); + memcpy (un.sun_path, addr, slen); + un.sun_path[slen] = '\0'; #if LINUX - un->sun_path[0] = '\0'; + un.sun_path[0] = '\0'; #endif slen += sizeof (sa_family_t); - sb = (struct sockaddr*) un; + sb = (struct sockaddr*) &un; sbs = slen; sent = GNUNET_NETWORK_socket_sendto(send_handle, message, ssize, sb, sbs); @@ -574,14 +574,9 @@ unix_real_send (void *cls, (sent < 0) ? STRERROR (errno) : "ok"); #endif GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG, "send"); + GNUNET_free(message); return ssize; } - if (incoming_retry_context != NULL) - { - GNUNET_free(incoming_retry_context->msg); - GNUNET_free(incoming_retry_context->addr); - GNUNET_free(incoming_retry_context); - } #if DEBUG_UNIX GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "UNIX transmit %u-byte message to %s (%d: %s)\n", @@ -600,6 +595,13 @@ unix_real_send (void *cls, } } + if (incoming_retry_context != NULL) + { + GNUNET_free(incoming_retry_context->msg); + GNUNET_free(incoming_retry_context->addr); + GNUNET_free(incoming_retry_context); + } + GNUNET_free (message); return sent; } @@ -837,22 +839,22 @@ unix_transport_server_start (void *cls) struct sockaddr *serverAddr; socklen_t addrlen; int sockets_created; - struct sockaddr_un *un; + struct sockaddr_un un; size_t slen; - un = GNUNET_malloc (sizeof (struct sockaddr_un)); - un->sun_family = AF_UNIX; + memset(&un, 0, sizeof(un)); + un.sun_family = AF_UNIX; slen = strlen (plugin->unix_socket_path) + 1; - GNUNET_assert(slen < sizeof(un->sun_path)); - memcpy (un->sun_path, plugin->unix_socket_path, slen); - un->sun_path[slen] = '\0'; + GNUNET_assert(slen < sizeof(un.sun_path)); + memcpy (un.sun_path, plugin->unix_socket_path, slen); + un.sun_path[slen] = '\0'; slen += sizeof (sa_family_t); - serverAddr = (struct sockaddr*) un; + serverAddr = (struct sockaddr*) &un; addrlen = slen; sockets_created = 0; #if LINUX - un->sun_path[0] = '\0'; + un.sun_path[0] = '\0'; #endif plugin->unix_sock.desc = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0); @@ -871,7 +873,7 @@ unix_transport_server_start (void *cls) #endif } else - GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Bound to `%s'\n", &un->sun_path[0]); + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Bound to `%s'\n", &un.sun_path[0]); if (plugin->unix_sock.desc != NULL) sockets_created++; }