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
[email protected]
https://lists.gnu.org/mailman/listinfo/gnunet-developers