patches/glibc/ports-2.10.1/180-resolv-dynamic.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Dec 30 15:36:22 2009 +0100 (2009-12-30)
changeset 1669 61edd9d19e3c
permissions -rw-r--r--
scripts/functions: add aria2, a powerfull downloader

aria2 is a powerfull downloader that is capable of chunking and
parallel retrieval.

Due to li;itations in crosstool-NG retrieval facilities, it's not possible
to take fully advantage of aria2. It might happen that, in the future,
those limitations get lifted away, so we can take use features such as
parallel downloading from more than one server at the same time. For now,
it should still speed up downloads thanks to parallel downloading of chunks.
     1 ripped from SuSE
     2 
     3 if /etc/resolv.conf is updated, then make sure applications
     4 already running get the updated information.
     5 
     6 http://bugs.gentoo.org/177416
     7 
     8 diff -durN glibc-2.10.1.orig/resolv/res_libc.c glibc-2.10.1/resolv/res_libc.c
     9 --- glibc-2.10.1.orig/resolv/res_libc.c	2009-02-07 05:27:42.000000000 +0100
    10 +++ glibc-2.10.1/resolv/res_libc.c	2009-11-13 00:49:59.000000000 +0100
    11 @@ -22,6 +22,7 @@
    12  #include <arpa/nameser.h>
    13  #include <resolv.h>
    14  #include <bits/libc-lock.h>
    15 +#include <sys/stat.h>
    16  
    17  
    18  /* The following bit is copied from res_data.c (where it is #ifdef'ed
    19 @@ -95,6 +96,20 @@
    20  __res_maybe_init (res_state resp, int preinit)
    21  {
    22  	if (resp->options & RES_INIT) {
    23 +		static time_t last_mtime, last_check;
    24 +		time_t now;
    25 +		struct stat statbuf;
    26 +		
    27 +		time (&now);
    28 +		if (now != last_check) {
    29 +			last_check = now;
    30 +			if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) {
    31 +				last_mtime = statbuf.st_mtime;
    32 +				atomicinclock (lock);
    33 +				atomicinc (__res_initstamp);
    34 +				atomicincunlock (lock);
    35 +			}
    36 +		}
    37  		if (__res_initstamp != resp->_u._ext.initstamp) {
    38  			if (resp->nscount > 0)
    39  				__res_iclose (resp, true);