author | "Yann E. MORIN" <yann.morin.1998@free.fr> |
Wed Jan 09 18:52:00 2013 +0100 (2013-01-09) | |
changeset 3156 | 006736cdb4e5 |
permissions | -rw-r--r-- |
yann@2437 | 1 |
ripped from SuSE |
yann@2437 | 2 |
|
yann@2437 | 3 |
if /etc/resolv.conf is updated, then make sure applications |
yann@2437 | 4 |
already running get the updated information. |
yann@2437 | 5 |
|
yann@2437 | 6 |
http://bugs.gentoo.org/177416 |
yann@2437 | 7 |
|
yann@2437 | 8 |
diff -durN glibc-2.12.1.orig/resolv/res_libc.c glibc-2.12.1/resolv/res_libc.c |
yann@2437 | 9 |
--- glibc-2.12.1.orig/resolv/res_libc.c 2009-02-07 05:27:42.000000000 +0100 |
yann@2437 | 10 |
+++ glibc-2.12.1/resolv/res_libc.c 2009-11-13 00:49:59.000000000 +0100 |
yann@2437 | 11 |
@@ -22,6 +22,7 @@ |
yann@2437 | 12 |
#include <arpa/nameser.h> |
yann@2437 | 13 |
#include <resolv.h> |
yann@2437 | 14 |
#include <bits/libc-lock.h> |
yann@2437 | 15 |
+#include <sys/stat.h> |
yann@2437 | 16 |
|
yann@2437 | 17 |
|
yann@2437 | 18 |
/* The following bit is copied from res_data.c (where it is #ifdef'ed |
yann@2437 | 19 |
@@ -95,6 +96,20 @@ |
yann@2437 | 20 |
__res_maybe_init (res_state resp, int preinit) |
yann@2437 | 21 |
{ |
yann@2437 | 22 |
if (resp->options & RES_INIT) { |
yann@2437 | 23 |
+ static time_t last_mtime, last_check; |
yann@2437 | 24 |
+ time_t now; |
yann@2437 | 25 |
+ struct stat statbuf; |
yann@2437 | 26 |
+ |
yann@2437 | 27 |
+ time (&now); |
yann@2437 | 28 |
+ if (now != last_check) { |
yann@2437 | 29 |
+ last_check = now; |
yann@2437 | 30 |
+ if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) { |
yann@2437 | 31 |
+ last_mtime = statbuf.st_mtime; |
yann@2437 | 32 |
+ atomicinclock (lock); |
yann@2437 | 33 |
+ atomicinc (__res_initstamp); |
yann@2437 | 34 |
+ atomicincunlock (lock); |
yann@2437 | 35 |
+ } |
yann@2437 | 36 |
+ } |
yann@2437 | 37 |
if (__res_initstamp != resp->_u._ext.initstamp) { |
yann@2437 | 38 |
if (resp->nscount > 0) |
yann@2437 | 39 |
__res_iclose (resp, true); |