On 07/06/17 08:10, LRN wrote: > For that matter, it should be possible to GNUNET_free(addrs[i]) > unconditionally, before the socket opening check (GCC probably optimizes like > that anyway, but why not help it?).
Thank you LRN, yes it is possible and here's the improved patch:- --- src/util/service.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/util/service.c b/src/util/service.c index d195452c9..fcdf45a51 100644 --- a/src/util/service.c +++ b/src/util/service.c @@ -1283,15 +1283,14 @@ setup_service (struct GNUNET_SERVICE_Handle *sh) slc->sh = sh; slc->listen_socket = open_listen_socket (addrs[i], addrlens[i]); + GNUNET_free (addrs[i]); if (NULL == slc->listen_socket) { GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "bind"); - GNUNET_free (addrs[i]); GNUNET_free (slc); continue; } - GNUNET_free (addrs[i]); GNUNET_CONTAINER_DLL_insert (sh->slc_head, sh->slc_tail, slc); -- 2.13.1 > More worrying, to me, is the fact that addrs array is "struct sockaddr ***", > where each struct is malloced individually and put into an array that is also > malloced itself. Maximum possible sockaddr size is known, so why isn't it just > a "struct sockaddr **"? I'm afraid it's a bit beyond me to answer this, or to correct it. jah _______________________________________________ GNUnet-developers mailing list GNUnet-developers@gnu.org https://lists.gnu.org/mailman/listinfo/gnunet-developers