aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_unix.c
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2011-02-04 15:42:45 +0000
committerNathan S. Evans <evans@in.tum.de>2011-02-04 15:42:45 +0000
commitd4c2d46ce0ebf0003b1383c4bf7e62e28abaf85f (patch)
tree604f8e0d4e9c8ee1ba9223d820a66bf46e9406cb /src/transport/plugin_transport_unix.c
parent35c68d63adec026a6460207141894e43a2b48a05 (diff)
downloadgnunet-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.c48
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 }