diff options
author | Nathan S. Evans <evans@in.tum.de> | 2011-02-04 15:42:45 +0000 |
---|---|---|
committer | Nathan S. Evans <evans@in.tum.de> | 2011-02-04 15:42:45 +0000 |
commit | d4c2d46ce0ebf0003b1383c4bf7e62e28abaf85f (patch) | |
tree | 604f8e0d4e9c8ee1ba9223d820a66bf46e9406cb /src/transport/plugin_transport_unix.c | |
parent | 35c68d63adec026a6460207141894e43a2b48a05 (diff) | |
download | gnunet-d4c2d46ce0ebf0003b1383c4bf7e62e28abaf85f.tar.gz gnunet-d4c2d46ce0ebf0003b1383c4bf7e62e28abaf85f.zip |
better memory usage, fix leak
Diffstat (limited to 'src/transport/plugin_transport_unix.c')
-rw-r--r-- | src/transport/plugin_transport_unix.c | 48 |
1 files changed, 25 insertions, 23 deletions
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, | |||
487 | ssize_t sent; | 487 | ssize_t sent; |
488 | const void *sb; | 488 | const void *sb; |
489 | size_t sbs; | 489 | size_t sbs; |
490 | struct sockaddr_un *un; | 490 | struct sockaddr_un un; |
491 | size_t slen; | 491 | size_t slen; |
492 | 492 | ||
493 | if (send_handle == NULL) | 493 | if (send_handle == NULL) |
@@ -522,18 +522,18 @@ unix_real_send (void *cls, | |||
522 | sizeof (struct GNUNET_PeerIdentity)); | 522 | sizeof (struct GNUNET_PeerIdentity)); |
523 | memcpy (&message[1], msgbuf, msgbuf_size); | 523 | memcpy (&message[1], msgbuf, msgbuf_size); |
524 | 524 | ||
525 | un = GNUNET_malloc (sizeof (struct sockaddr_un)); | 525 | memset(&un, 0, sizeof(un)); |
526 | un->sun_family = AF_UNIX; | 526 | un.sun_family = AF_UNIX; |
527 | slen = strlen (addr) + 1; | 527 | slen = strlen (addr) + 1; |
528 | sent = 0; | 528 | sent = 0; |
529 | GNUNET_assert(slen < sizeof(un->sun_path)); | 529 | GNUNET_assert(slen < sizeof(un.sun_path)); |
530 | memcpy (un->sun_path, addr, slen); | 530 | memcpy (un.sun_path, addr, slen); |
531 | un->sun_path[slen] = '\0'; | 531 | un.sun_path[slen] = '\0'; |
532 | #if LINUX | 532 | #if LINUX |
533 | un->sun_path[0] = '\0'; | 533 | un.sun_path[0] = '\0'; |
534 | #endif | 534 | #endif |
535 | slen += sizeof (sa_family_t); | 535 | slen += sizeof (sa_family_t); |
536 | sb = (struct sockaddr*) un; | 536 | sb = (struct sockaddr*) &un; |
537 | sbs = slen; | 537 | sbs = slen; |
538 | 538 | ||
539 | sent = GNUNET_NETWORK_socket_sendto(send_handle, message, ssize, sb, sbs); | 539 | sent = GNUNET_NETWORK_socket_sendto(send_handle, message, ssize, sb, sbs); |
@@ -574,14 +574,9 @@ unix_real_send (void *cls, | |||
574 | (sent < 0) ? STRERROR (errno) : "ok"); | 574 | (sent < 0) ? STRERROR (errno) : "ok"); |
575 | #endif | 575 | #endif |
576 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG, "send"); | 576 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG, "send"); |
577 | GNUNET_free(message); | ||
577 | return ssize; | 578 | return ssize; |
578 | } | 579 | } |
579 | if (incoming_retry_context != NULL) | ||
580 | { | ||
581 | GNUNET_free(incoming_retry_context->msg); | ||
582 | GNUNET_free(incoming_retry_context->addr); | ||
583 | GNUNET_free(incoming_retry_context); | ||
584 | } | ||
585 | #if DEBUG_UNIX | 580 | #if DEBUG_UNIX |
586 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 581 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
587 | "UNIX transmit %u-byte message to %s (%d: %s)\n", | 582 | "UNIX transmit %u-byte message to %s (%d: %s)\n", |
@@ -600,6 +595,13 @@ unix_real_send (void *cls, | |||
600 | } | 595 | } |
601 | } | 596 | } |
602 | 597 | ||
598 | if (incoming_retry_context != NULL) | ||
599 | { | ||
600 | GNUNET_free(incoming_retry_context->msg); | ||
601 | GNUNET_free(incoming_retry_context->addr); | ||
602 | GNUNET_free(incoming_retry_context); | ||
603 | } | ||
604 | |||
603 | GNUNET_free (message); | 605 | GNUNET_free (message); |
604 | return sent; | 606 | return sent; |
605 | } | 607 | } |
@@ -837,22 +839,22 @@ unix_transport_server_start (void *cls) | |||
837 | struct sockaddr *serverAddr; | 839 | struct sockaddr *serverAddr; |
838 | socklen_t addrlen; | 840 | socklen_t addrlen; |
839 | int sockets_created; | 841 | int sockets_created; |
840 | struct sockaddr_un *un; | 842 | struct sockaddr_un un; |
841 | size_t slen; | 843 | size_t slen; |
842 | 844 | ||
843 | un = GNUNET_malloc (sizeof (struct sockaddr_un)); | 845 | memset(&un, 0, sizeof(un)); |
844 | un->sun_family = AF_UNIX; | 846 | un.sun_family = AF_UNIX; |
845 | slen = strlen (plugin->unix_socket_path) + 1; | 847 | slen = strlen (plugin->unix_socket_path) + 1; |
846 | 848 | ||
847 | GNUNET_assert(slen < sizeof(un->sun_path)); | 849 | GNUNET_assert(slen < sizeof(un.sun_path)); |
848 | memcpy (un->sun_path, plugin->unix_socket_path, slen); | 850 | memcpy (un.sun_path, plugin->unix_socket_path, slen); |
849 | un->sun_path[slen] = '\0'; | 851 | un.sun_path[slen] = '\0'; |
850 | slen += sizeof (sa_family_t); | 852 | slen += sizeof (sa_family_t); |
851 | serverAddr = (struct sockaddr*) un; | 853 | serverAddr = (struct sockaddr*) &un; |
852 | addrlen = slen; | 854 | addrlen = slen; |
853 | sockets_created = 0; | 855 | sockets_created = 0; |
854 | #if LINUX | 856 | #if LINUX |
855 | un->sun_path[0] = '\0'; | 857 | un.sun_path[0] = '\0'; |
856 | #endif | 858 | #endif |
857 | 859 | ||
858 | plugin->unix_sock.desc = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0); | 860 | plugin->unix_sock.desc = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_DGRAM, 0); |
@@ -871,7 +873,7 @@ unix_transport_server_start (void *cls) | |||
871 | #endif | 873 | #endif |
872 | } | 874 | } |
873 | else | 875 | else |
874 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Bound to `%s'\n", &un->sun_path[0]); | 876 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Bound to `%s'\n", &un.sun_path[0]); |
875 | if (plugin->unix_sock.desc != NULL) | 877 | if (plugin->unix_sock.desc != NULL) |
876 | sockets_created++; | 878 | sockets_created++; |
877 | } | 879 | } |