aboutsummaryrefslogtreecommitdiff
path: root/resolv
diff options
context:
space:
mode:
Diffstat (limited to 'resolv')
-rw-r--r--resolv/gai_misc.c6
-rw-r--r--resolv/res-close.c2
-rw-r--r--resolv/res_hconf.c16
-rw-r--r--resolv/resolv-internal.h14
-rw-r--r--resolv/resolv_conf.c3
-rw-r--r--resolv/tst-leaks2.c2
6 files changed, 26 insertions, 17 deletions
diff --git a/resolv/gai_misc.c b/resolv/gai_misc.c
index dda9b47f00..9e3b1d29b7 100644
--- a/resolv/gai_misc.c
+++ b/resolv/gai_misc.c
@@ -434,7 +434,11 @@ handle_requests (void *arg)
/* Free allocated resources. */
-libc_freeres_fn (free_res)
+#if !PTHREAD_IN_LIBC
+__attribute__ ((__destructor__)) static
+#endif
+void
+__gai_freemem (void)
{
size_t row;
diff --git a/resolv/res-close.c b/resolv/res-close.c
index 936fd3d1dd..8d546777c7 100644
--- a/resolv/res-close.c
+++ b/resolv/res-close.c
@@ -140,5 +140,3 @@ __res_thread_freeres (void)
/* Make sure we do a full re-initialization the next time. */
_res.options = 0;
}
-/* Also must be called when the main thread exits. */
-text_set_element (__libc_subfreeres, __res_thread_freeres);
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index 2c4e12b6cd..89bd20be38 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -42,6 +42,7 @@
#include "res_hconf.h"
#include <wchar.h>
#include <atomic.h>
+#include <set-freeres.h>
#if IS_IN (libc)
# define fgets_unlocked __fgets_unlocked
@@ -330,19 +331,8 @@ _res_hconf_init (void)
#if IS_IN (libc)
# if defined SIOCGIFCONF && defined SIOCGIFNETMASK
/* List of known interfaces. */
-libc_freeres_ptr (
-static struct netaddr
-{
- int addrtype;
- union
- {
- struct
- {
- uint32_t addr;
- uint32_t mask;
- } ipv4;
- } u;
-} *ifaddrs);
+static struct netaddr *ifaddrs;
+weak_alias (ifaddrs, __libc_resolv_res_hconf_freemem_ptr)
# endif
/* Reorder addresses returned in a hostent such that the first address
diff --git a/resolv/resolv-internal.h b/resolv/resolv-internal.h
index 97812ebf6c..c55f3c0366 100644
--- a/resolv/resolv-internal.h
+++ b/resolv/resolv-internal.h
@@ -34,6 +34,20 @@
loads and stores. */
typedef HEADER __attribute__ ((__aligned__(1))) UHEADER;
+/* List of known interfaces. */
+struct netaddr
+{
+ int addrtype;
+ union
+ {
+ struct
+ {
+ uint32_t addr;
+ uint32_t mask;
+ } ipv4;
+ } u;
+};
+
/* Legacy function. This needs to be removed once all NSS modules
have been adjusted. */
static inline bool
diff --git a/resolv/resolv_conf.c b/resolv/resolv_conf.c
index 2e561c8959..0ef66d49d3 100644
--- a/resolv/resolv_conf.c
+++ b/resolv/resolv_conf.c
@@ -654,7 +654,8 @@ __resolv_conf_detach (struct __res_state *resp)
}
/* Deallocate the global data. */
-libc_freeres_fn (freeres)
+void
+__libc_resolv_conf_freemem (void)
{
/* No locking because this function is supposed to be called when
the process has turned single-threaded. */
diff --git a/resolv/tst-leaks2.c b/resolv/tst-leaks2.c
index 3851ea06ce..50a8054546 100644
--- a/resolv/tst-leaks2.c
+++ b/resolv/tst-leaks2.c
@@ -23,6 +23,8 @@
#include <resolv.h>
#include <support/check.h>
+void __libc_freeres (void);
+
static int
do_test (void)
{