author | Richard Braun <rbraun@sceen.net> |
Mon Nov 26 11:44:01 2012 +0100 (2012-11-26) | |
changeset 3132 | be7a7e33bdf0 |
parent 1201 | c9967a6e3b25 |
permissions | -rw-r--r-- |
yann@1201 | 1 |
Original patch from: gentoo/src/patchsets/glibc/2.9/1055_all_glibc-resolv-dynamic.patch |
yann@1201 | 2 |
|
yann@1201 | 3 |
-= BEGIN original header =- |
yann@1201 | 4 |
ripped from SuSE |
yann@1201 | 5 |
|
yann@1201 | 6 |
if /etc/resolv.conf is updated, then make sure applications |
yann@1201 | 7 |
already running get the updated information. |
yann@1201 | 8 |
|
yann@1201 | 9 |
http://bugs.gentoo.org/177416 |
yann@1201 | 10 |
|
yann@1201 | 11 |
-= END original header =- |
yann@1201 | 12 |
|
yann@1201 | 13 |
diff -durN glibc-2_9.orig/resolv/res_libc.c glibc-2_9/resolv/res_libc.c |
yann@1201 | 14 |
--- glibc-2_9.orig/resolv/res_libc.c 2006-10-11 10:59:28.000000000 +0200 |
yann@1201 | 15 |
+++ glibc-2_9/resolv/res_libc.c 2009-02-02 22:00:57.000000000 +0100 |
yann@1201 | 16 |
@@ -22,6 +22,7 @@ |
yann@1201 | 17 |
#include <arpa/nameser.h> |
yann@1201 | 18 |
#include <resolv.h> |
yann@1201 | 19 |
#include <bits/libc-lock.h> |
yann@1201 | 20 |
+#include <sys/stat.h> |
yann@1201 | 21 |
|
yann@1201 | 22 |
|
yann@1201 | 23 |
/* The following bit is copied from res_data.c (where it is #ifdef'ed |
yann@1201 | 24 |
@@ -95,6 +96,20 @@ |
yann@1201 | 25 |
__res_maybe_init (res_state resp, int preinit) |
yann@1201 | 26 |
{ |
yann@1201 | 27 |
if (resp->options & RES_INIT) { |
yann@1201 | 28 |
+ static time_t last_mtime, last_check; |
yann@1201 | 29 |
+ time_t now; |
yann@1201 | 30 |
+ struct stat statbuf; |
yann@1201 | 31 |
+ |
yann@1201 | 32 |
+ time (&now); |
yann@1201 | 33 |
+ if (now != last_check) { |
yann@1201 | 34 |
+ last_check = now; |
yann@1201 | 35 |
+ if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) { |
yann@1201 | 36 |
+ last_mtime = statbuf.st_mtime; |
yann@1201 | 37 |
+ atomicinclock (lock); |
yann@1201 | 38 |
+ atomicinc (__res_initstamp); |
yann@1201 | 39 |
+ atomicincunlock (lock); |
yann@1201 | 40 |
+ } |
yann@1201 | 41 |
+ } |
yann@1201 | 42 |
if (__res_initstamp != resp->_u._ext.initstamp) { |
yann@1201 | 43 |
if (resp->nscount > 0) { |
yann@1201 | 44 |
__res_iclose (resp, true); |