From c52137d39101515cacb67a2bcd43b77bd06284e0 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 19 Apr 2008 16:42:41 +0000 Subject: [PATCH] [BZ #5209, BZ #5381] 2008-04-15 Ulrich Drepper [BZ #5209] * sysdeps/unix/sysv/linux/times.c: New file. [BZ #5381] * nscd/nscd.h: Define enum in_flight, mem_in_flight, and mem_in_flight_list variables. Add new parameter to mempool_alloc prototype. * nscd/mem.c (mempool_alloc): Take additional parameter. Initialize appropriate mem_in_flight element. (gc): Take allocations which have not yet been committed to the database into account. * nscd/cache.c (cache_add): Add new parameter to mempool_alloc call. Reset mem_in_flight before returning. * nscd/connections.c (nscd_run_worker): Initialize mem_in_flight and cue it up in mem_in_flight_list. * nscd/aicache.c: Adjust mempool_alloc call. * nscd/grpcache.c: Likewise. * nscd/hstcache.c: Likewise. * nscd/initgrcache.c: Likewise. * nscd/pwdcache.c: Likewise. * nscd/servicescache.c: Likewise. * nscd/Makefile (nscd-flags): Until ld is fixed, use -fpic instead of -fpie. * nscd/connections.c (handle_request): Provide better error message in case SELinux forbids the service. * version.h (VERSION): Bump to 2.8.90. --- ChangeLog | 31 ++++ localedata/ChangeLog | 5 + localedata/charmaps/UTF-8 | 133 ++++++++------- localedata/locales/i18n | 412 +++++++++++++++++++++++++++++----------------- nscd/Makefile | 5 +- nscd/aicache.c | 11 +- nscd/cache.c | 13 +- nscd/connections.c | 47 +++++- nscd/grpcache.c | 11 +- nscd/hstcache.c | 11 +- nscd/initgrcache.c | 11 +- nscd/mem.c | 35 +++- nscd/nscd.h | 28 +++- nscd/pwdcache.c | 11 +- nscd/servicescache.c | 11 +- 15 files changed, 523 insertions(+), 252 deletions(-) diff --git a/ChangeLog b/ChangeLog index 873ddb6..2d7aac2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,34 @@ +2008-04-15 Ulrich Drepper + + [BZ #5209] + * sysdeps/unix/sysv/linux/times.c: New file. + + [BZ #5381] + * nscd/nscd.h: Define enum in_flight, mem_in_flight, and + mem_in_flight_list variables. Add new parameter to mempool_alloc + prototype. + * nscd/mem.c (mempool_alloc): Take additional parameter. Initialize + appropriate mem_in_flight element. + (gc): Take allocations which have not yet been committed to the + database into account. + * nscd/cache.c (cache_add): Add new parameter to mempool_alloc call. + Reset mem_in_flight before returning. + * nscd/connections.c (nscd_run_worker): Initialize mem_in_flight and + cue it up in mem_in_flight_list. + * nscd/aicache.c: Adjust mempool_alloc call. + * nscd/grpcache.c: Likewise. + * nscd/hstcache.c: Likewise. + * nscd/initgrcache.c: Likewise. + * nscd/pwdcache.c: Likewise. + * nscd/servicescache.c: Likewise. + * nscd/Makefile (nscd-flags): Until ld is fixed, use -fpic instead + of -fpie. + + * nscd/connections.c (handle_request): Provide better error message + in case SELinux forbids the service. + + * version.h (VERSION): Bump to 2.8.90. + 2008-04-17 Jakub Jelinek * sysdeps/unix/sysv/linux/dl-osinfo.h: Include fcntl.h. diff --git a/localedata/ChangeLog b/localedata/ChangeLog index 61f2151..5c9cbf2 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,8 @@ +2008-04-15 Ulrich Drepper + + * charmaps/UTF-8: Update for Unicode v5.1. + * locales/i18n: Update for Unicode 5. + 2008-04-09 Ulrich Drepper * tst-langinfo.sh: Adjust for latest fr_FR locale changes. diff --git a/localedata/charmaps/UTF-8 b/localedata/charmaps/UTF-8 index 4ace376..d4375bb 100644 --- a/localedata/charmaps/UTF-8 +++ b/localedata/charmaps/UTF-8 @@ -899,7 +899,6 @@ CHARMAP /xcd/xbc GREEK SMALL DOTTED LUNATE SIGMA SYMBOL /xcd/xbd GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL /xcd/xbe GREEK QUESTION MARK - /xcd/xbf GREEK CAPITAL KAI SYMBOL /xce/x84 GREEK TONOS /xce/x85 GREEK DIALYTIKA TONOS /xce/x86 GREEK CAPITAL LETTER ALPHA WITH TONOS @@ -972,6 +971,7 @@ CHARMAP /xcf/x8c GREEK SMALL LETTER OMICRON WITH TONOS /xcf/x8d GREEK SMALL LETTER UPSILON WITH TONOS /xcf/x8e GREEK SMALL LETTER OMEGA WITH TONOS + /xcf/x8f GREEK CAPITAL KAI SYMBOL /xcf/x90 GREEK BETA SYMBOL /xcf/x91 GREEK THETA SYMBOL /xcf/x92 GREEK UPSILON WITH HOOK SYMBOL @@ -9443,71 +9443,71 @@ CHARMAP /xe2/xb4/xa3 GEORGIAN SMALL LETTER WE /xe2/xb4/xa4 GEORGIAN SMALL LETTER HAR /xe2/xb4/xa5 GEORGIAN SMALL LETTER HOE - /xe2/xb4/xb0 TIFINAGH YA - /xe2/xb4/xb1 LETTRE TIFINAGHE YAB - /xe2/xb4/xb2 LETTRE TIFINAGHE YAB SPIRANT - /xe2/xb4/xb3 LETTRE TIFINAGHE YAG - /xe2/xb4/xb4 LETTRE TIFINAGHE YAG SPIRANT - /xe2/xb4/xb5 LETTRE TIFINAGHE YADJ KABYLE - /xe2/xb4/xb6 LETTRE TIFINAGHE YADJ - /xe2/xb4/xb7 LETTRE TIFINAGHE YAD - /xe2/xb4/xb8 LETTRE TIFINAGHE YAD SPIRANT (yadh) - /xe2/xb4/xb9 LETTRE TIFINAGHE YADD - /xe2/xb4/xba LETTRE TIFINAGHE YADD SPIRANT - /xe2/xb4/xbb LETTRE TIFINAGHE YEY - /xe2/xb4/xbc LETTRE TIFINAGHE YAF - /xe2/xb4/xbd LETTRE TIFINAGHE YAK - /xe2/xb4/xbe LETTRE TIFINAGHE YAK TOUAREG - /xe2/xb4/xbf LETTRE TIFINAGHE YAK SPIRANT - /xe2/xb5/x80 LETTRE TIFINAGHE YAH (yab touareg) - /xe2/xb5/x81 LETTRE TIFINAGHE YAH KABYLE - /xe2/xb5/x82 LETTRE TIFINAGHE YAH TOUAREG - /xe2/xb5/x83 LETTRE TIFINAGHE YAHH - /xe2/xb5/x84 LETTRE TIFINAGHE YA’ - /xe2/xb5/x85 LETTRE TIFINAGHE YAKH - /xe2/xb5/x86 LETTRE TIFINAGHE YAKH TOUAREG (quatre-points en carré touareg) - /xe2/xb5/x87 LETTRE TIFINAGHE YAQ - /xe2/xb5/x88 LETTRE TIFINAGHE YAQ TOUAREG - /xe2/xb5/x89 LETTRE TIFINAGHE YI - /xe2/xb5/x8a LETTRE TIFINAGHE YAJ - /xe2/xb5/x8b LETTRE TIFINAGHE YAJ DE L’AHAGGAR - /xe2/xb5/x8c LETTRE TIFINAGHE YAJ TOUAREG - /xe2/xb5/x8d LETTRE TIFINAGHE YAL - /xe2/xb5/x8e LETTRE TIFINAGHE YAM - /xe2/xb5/x8f LETTRE TIFINAGHE YAN - /xe2/xb5/x90 LETTRE TIFINAGHE YAGN TOUAREG - /xe2/xb5/x91 LETTRE TIFINAGHE YANG TOUAREG - /xe2/xb5/x92 LETTRE TIFINAGHE YAP - /xe2/xb5/x93 LETTRE TIFINAGHE YOU (yaw touareg) - /xe2/xb5/x94 LETTRE TIFINAGHE YAR - /xe2/xb5/x95 LETTRE TIFINAGHE YARR - /xe2/xb5/x96 LETTRE TIFINAGHE YAGH - /xe2/xb5/x97 LETTRE TIFINAGHE YAGH TOUAREG - /xe2/xb5/x98 LETTRE TIFINAGHE YAGH DE L’AÏR (yadj de l’Adrar, cinq-points en quinconce touareg) - /xe2/xb5/x99 LETTRE TIFINAGHE YAS - /xe2/xb5/x9a LETTRE TIFINAGHE YASS - /xe2/xb5/x9b LETTRE TIFINAGHE YACH - /xe2/xb5/x9c LETTRE TIFINAGHE YAT - /xe2/xb5/x9d LETTRE TIFINAGHE YAT SPIRANT (yath) - /xe2/xb5/x9e LETTRE TIFINAGHE YATCH - /xe2/xb5/x9f LETTRE TIFINAGHE YATT - /xe2/xb5/xa0 LETTRE TIFINAGHE YAV - /xe2/xb5/xa1 LETTRE TIFINAGHE YAW - /xe2/xb5/xa2 LETTRE TIFINAGHE YAY - /xe2/xb5/xa3 LETTRE TIFINAGHE YAZ - /xe2/xb5/xa4 LETTRE TIFINAGHE YAZ TAWELLEMET (yaz harpon) - /xe2/xb5/xa5 LETTRE TIFINAGHE YAZZ - /xe2/xb5/xaf LETTRE MODIFICATIVE TIFINAGHE DE LABIO-VÉLARISATION (tamatart) - /xe2/xb6/x80 ETHIOPIC SYLLALE LOA - /xe2/xb6/x81 ETHIOPIC SYLLALE MOA - /xe2/xb6/x82 ETHIOPIC SYLLALE ROA - /xe2/xb6/x83 ETHIOPIC SYLLALE SOA - /xe2/xb6/x84 ETHIOPIC SYLLALE SHOA - /xe2/xb6/x85 ETHIOPIC SYLLALE BOA - /xe2/xb6/x86 ETHIOPIC SYLLALE TOA - /xe2/xb6/x87 ETHIOPIC SYLLALE COA - /xe2/xb6/x88 ETHIOPIC SYLLALE NOA - /xe2/xb6/x89 ETHIOPIC SYLLALE NYOA + /xe2/xb4/xb0 TIFINAGH LETTER YA + /xe2/xb4/xb1 TIFINAGH LETTER YAB + /xe2/xb4/xb2 TIFINAGH LETTER YABH + /xe2/xb4/xb3 TIFINAGH LETTER YAG + /xe2/xb4/xb4 TIFINAGH LETTER YAGHH + /xe2/xb4/xb5 TIFINAGH LETTER BERBER ACADEMY YAJ + /xe2/xb4/xb6 TIFINAGH LETTER YAJ + /xe2/xb4/xb7 TIFINAGH LETTER YAD + /xe2/xb4/xb8 TIFINAGH LETTER YADH + /xe2/xb4/xb9 TIFINAGH LETTER YADD + /xe2/xb4/xba TIFINAGH LETTER YADDH + /xe2/xb4/xbb TIFINAGH LETTER YEY + /xe2/xb4/xbc TIFINAGH LETTER YAF + /xe2/xb4/xbd TIFINAGH LETTER YAK + /xe2/xb4/xbe TIFINAGH LETTER TUAREG YAK + /xe2/xb4/xbf TIFINAGH LETTER YAKHH + /xe2/xb5/x80 TIFINAGH LETTER YAH + /xe2/xb5/x81 TIFINAGH LETTER BERBER ACADEMY YAH + /xe2/xb5/x82 TIFINAGH LETTER TUAREG YAH + /xe2/xb5/x83 TIFINAGH LETTER YAHH + /xe2/xb5/x84 TIFINAGH LETTER YAA + /xe2/xb5/x85 TIFINAGH LETTER YAKH + /xe2/xb5/x86 TIFINAGH LETTER TUAREG YAKH + /xe2/xb5/x87 TIFINAGH LETTER YAQ + /xe2/xb5/x88 TIFINAGH LETTER TUAREG YAQ + /xe2/xb5/x89 TIFINAGH LETTER YI + /xe2/xb5/x8a TIFINAGH LETTER YAZH + /xe2/xb5/x8b TIFINAGH LETTER AHAGGAR YAZH + /xe2/xb5/x8c TIFINAGH LETTER TUAREG YAZH + /xe2/xb5/x8d TIFINAGH LETTER YAL + /xe2/xb5/x8e TIFINAGH LETTER YAM + /xe2/xb5/x8f TIFINAGH LETTER YAN + /xe2/xb5/x90 TIFINAGH LETTER TUAREG YAGN + /xe2/xb5/x91 TIFINAGH LETTER TUAREG YANG + /xe2/xb5/x92 TIFINAGH LETTER YAP + /xe2/xb5/x93 TIFINAGH LETTER YU + /xe2/xb5/x94 TIFINAGH LETTER YAR + /xe2/xb5/x95 TIFINAGH LETTER YARR + /xe2/xb5/x96 TIFINAGH LETTER YAGH + /xe2/xb5/x97 TIFINAGH LETTER TUAREG YAGH + /xe2/xb5/x98 TIFINAGH LETTER AYER YAGH + /xe2/xb5/x99 TIFINAGH LETTER YAS + /xe2/xb5/x9a TIFINAGH LETTER YASS + /xe2/xb5/x9b TIFINAGH LETTER YASH + /xe2/xb5/x9c TIFINAGH LETTER YAT + /xe2/xb5/x9d TIFINAGH LETTER YATH + /xe2/xb5/x9e TIFINAGH LETTER YACH + /xe2/xb5/x9f TIFINAGH LETTER YATT + /xe2/xb5/xa0 TIFINAGH LETTER YAV + /xe2/xb5/xa1 TIFINAGH LETTER YAW + /xe2/xb5/xa2 TIFINAGH LETTER YAY + /xe2/xb5/xa3 TIFINAGH LETTER YAZ + /xe2/xb5/xa4 TIFINAGH LETTER TAWELLEMET YAZ + /xe2/xb5/xa5 TIFINAGH LETTER YAZZ + /xe2/xb5/xaf TIFINAGH MODIFIER LETTER LABIALIZATION MARK + /xe2/xb6/x80 ETHIOPIC SYLLABLE LOA + /xe2/xb6/x81 ETHIOPIC SYLLABLE MOA + /xe2/xb6/x82 ETHIOPIC SYLLABLE ROA + /xe2/xb6/x83 ETHIOPIC SYLLABLE SOA + /xe2/xb6/x84 ETHIOPIC SYLLABLE SHOA + /xe2/xb6/x85 ETHIOPIC SYLLABLE BOA + /xe2/xb6/x86 ETHIOPIC SYLLABLE TOA + /xe2/xb6/x87 ETHIOPIC SYLLABLE COA + /xe2/xb6/x88 ETHIOPIC SYLLABLE NOA + /xe2/xb6/x89 ETHIOPIC SYLLABLE NYOA /xe2/xb6/x8a ETHIOPIC SYLLABLE GLOTTAL OA /xe2/xb6/x8b ETHIOPIC SYLLABLE ZOA /xe2/xb6/x8c ETHIOPIC SYLLABLE DOA @@ -26425,7 +26425,6 @@ CHARMAP /xef/xbf/xbc OBJECT REPLACEMENT CHARACTER /xef/xbf/xbd REPLACEMENT CHARACTER /xf0/x90/x80/x80 LINEAR B SYLLABLE B008 A - /xf0/x90/x80/x80 LINEAR B SYLLABLE B008 A /xf0/x90/x80/x81 LINEAR B SYLLABLE B038 E /xf0/x90/x80/x82 LINEAR B SYLLABLE B028 I /xf0/x90/x80/x83 LINEAR B SYLLABLE B061 O diff --git a/localedata/locales/i18n b/localedata/locales/i18n index 93ffe90..7287424 100644 --- a/localedata/locales/i18n +++ b/localedata/locales/i18n @@ -2,20 +2,17 @@ escape_char / comment_char % LC_IDENTIFICATION -% This is the ISO/IEC TR 14652 "i18n" definition for -% the LC_IDENTIFICATION category. -% -title "ISO/IEC TR 14652 i18n FDCC-set" -source "ISO/IEC Copyright Office" -address "Case postale 56, CH-1211 Geneve 20, Switzerland" +title "" +source "" +address "" contact "" email "" tel "" fax "" language "" -territory "ISO" -revision "1.0" -date "2000-01-24" +territory "" +revision "" +date "2008-04-13" % category "i18n:2000";LC_IDENTIFICATION category "i18n:2000";LC_CTYPE @@ -63,6 +60,7 @@ upper / ;;;;/ ;..;;;;;/ % BASIC GREEK/ + ;;;/ ;..;;;;..;/ ..;..(2)..;/ % GREEK SYMBOLS AND COPTIC/ @@ -73,7 +71,7 @@ upper / ;..(2)..;;..(2)..;/ ..(2)..;/ % CYRILLIC SUPPLEMENT/ - ..(2)..;/ + ..(2)..;/ % ARMENIAN/ ..;/ % GEORGIAN/ @@ -83,8 +81,8 @@ upper / ..;/ % LATIN EXTENDED ADDITIONAL/ ..(2)..;/ - ..(2)..;/ - ..(2)..;/ + ..(2)..;;/ + ..(2)..;/ % GREEK EXTENDED/ ..;..;..;..;/ ..;..(2)..;..;/ @@ -101,9 +99,15 @@ upper / % GLAGOLITIC/ ..;/ % LATIN EXTENDED-C/ - ;..;..(2)..;;/ + ;..;..(2)..;..;/ + ;;;/ % COPTIC/ ..(2)..;/ +% CYRILLIC SUPPLEMENT 2/ + ..(2)..;..(2)..;..(2)..;/ +% LATIN EXTENDED-D/ + ..(2)..;..(2)..;..(2)..;/ + ..(2)..;/ % HALFWIDTH AND FULLWIDTH FORMS/ ..;/ % DESERET/ @@ -133,6 +137,7 @@ lower / % COMBINING DIACRITICAL MARKS/ ;/ % BASIC GREEK/ + ;;;/ ..;/ ..;..;/ % GREEK SYMBOLS AND COPTIC/ @@ -142,13 +147,13 @@ lower / ..;..(2)..;/ ;..(2)..;..(2)..;/ ;/ - ..(2)..;/ + ..(2)..;/ % ARMENIAN/ ..;/ % PHONETIC EXTENSIONS/ ;/ % LATIN EXTENDED ADDITIONAL/ - ..(2)..;;..(2)..;/ + ..(2)..;..;;..(2)..;/ % GREEK EXTENDED/ ..;..;..;..;/ ..;..(2)..;..;..;/ @@ -158,19 +163,25 @@ lower / % LETTERLIKE SYMBOLS/ ;/ % NUMBER FORMS/ - ..;;/ + ..;;/ % ENCLOSED ALPHANUMERICS/ ..;/ % GLAGOLITIC/ ..;/ % LATIN EXTENDED-C/ - ;;..(2)..;;/ + ;;..(2)..;;;;/ + ..;/ % COPTIC/ ..(2)..;/ % GEORGIAN SUPPLEMENT/ % well, there are three georgian blocks defined; one caseless (the one usually/ % used), one defined as uppercase and one as lowercase. defining the lowercase one here/ ..;/ +% CYRILLIC SUPPLEMENT 2/ + ..(2)..;..(2)..;..(2)..;/ +% LATIN EXTENDED-D/ + ..(2)..;;..(2)..;..;/ + ..(2)..;..(2)..;;/ % HALFWIDTH AND FULLWIDTH FORMS/ ..;/ % DESERET/ @@ -196,7 +207,7 @@ alpha / % COMBINING DIACRITICAL MARKS/ ;/ % BASIC GREEK/ - ..;;/ + ..;..;..;;/ ..;;..;/ ..;/ % GREEK SYMBOLS AND COPTIC/ @@ -204,18 +215,18 @@ alpha / % CYRILLIC/ ..;..;/ % CYRILLIC SUPPLEMENT/ - ..;/ + ..;/ % ARMENIAN/ ..;;..;/ % HEBREW/ ..;..;/ % ARABIC/ - ..;..;..;..;/ + ..;..;..;/ ;..;..;..;;/ % SYRIAC/ ;..;..;/ % ARABIC SUPPLEMENT/ - ..;/ + ..;/ % THAANA/ ..;;/ % NKO/ @@ -238,20 +249,20 @@ alpha / % ORIYA/ ..;;;..;..;/ ;;..;;;;/ - ..;;/ + ..;;/ % TAMIL/ ;..;..;..;;/ ;;;;;;..;/ ..;/ % TELUGU/ ..;..;..;..;/ - ..;..;/ + ..;;..;..;/ % KANNADA/ ..;..;..;..;/ ..;;..;/ % MALAYALAM/ ..;..;..;..;/ - ..;/ + ;..;/ % SINHALA/ ..;..;..;;/ ..;/ @@ -263,9 +274,10 @@ alpha / ..;..;..;;/ ..;;..;/ % TIBETAN/ - ;..;..;..;/ + ;..;..;..;/ % MYANMAR/ - ..;..;;;..;/ + ..;..;..;;;/ + ;..;..;;/ % GEORGIAN/ ..;..;;/ % HANGUL JAMO/ @@ -298,7 +310,7 @@ alpha / % KHMER/ ..;;;/ % MONGOLIAN/ - ..;..;/ + ..;..;;/ % LIMBU/ ..;..;/ % TAI LE/ @@ -309,10 +321,16 @@ alpha / ..;/ % BALINESE/ ..;..;..;/ +% SUNDANESE/ + ..;..;/ +% LEPCHA/ + ..;..;/ +% OL CHIKI/ + ..;/ % PHONETIC EXTENSIONS/ ..;/ % LATIN EXTENDED ADDITIONAL/ - ..;..;/ + ..;..;/ % GREEK EXTENDED/ ..;..;..;..;/ ..;;;;..;/ @@ -326,13 +344,13 @@ alpha / ;..;..;/ ..;..;;/ % NUMBER FORMS/ - ..;/ + ..;/ % ENCLOSED ALPHANUMERICS/ ..;/ % GLAGOLITIC/ ..;..;/ % LATIN EXTENDED-C/ - ..;..;/ + ..;..;/ % COPTIC/ ..;/ % GEORGIAN SUPPLEMENT/ @@ -350,7 +368,7 @@ alpha / % KATAKANA/ ..;..;/ % BOPOMOFO/ - ..;/ + ..;/ % HANGUL COMPATIBILITY JAMO/ ..;/ % BOPOMOFO EXTENDED/ @@ -363,12 +381,24 @@ alpha / ..;/ % YI SYLLABLES/ ..;/ +% VAI SYLLABLES/ + ..;..;..;/ +% CYRILLIC SUPPLEMENT 2/ + ..;..;..;/ % LATIN EXTENDED-D/ - ..;/ + ..;..;..;/ % SYLOTI NEGRI/ ;;..;..;..;/ % PHAGS PA/ ..;/ +% SAURASHTRA/ + ..;/ +% KAYAH LI/ + ..;/ +% REJANG/ + ..;/ +% CHAM/ + ..;..;..;/ % HANGUL SYLLABLES/ ..;/ % CJK COMPATIBILITY IDEOGRAPHS/ @@ -394,6 +424,10 @@ alpha / ..;/ % ANCIENT GREEK NUMBERS/ ..;/ +% LYCIAN/ + ..;/ +% CARIAN/ + ..;/ % OLD ITALIC/ ..;/ % GOTHIC/ @@ -458,11 +492,11 @@ alpha / % TAMIL/ ..;/ % TELUGU/ - ..;/ + ..;..;/ % KANNADA/ ..;/ % MALAYALAM/ - ..;/ + ..;..;/ % THAI/ ..;/ % LAO/ @@ -475,6 +509,20 @@ alpha / ..;/ % MONGOLIAN/ ..;/ +% SUNDANESE/ + ..;/ +% LEPCHA/ + ..;/ +% OL CHIKI/ + ..;/ +% VAI/ + ..;/ +% SAURASHTRA/ + ..;/ +% KAYAH LI/ + ..;/ +% CHAM/ + ..;/ % HALFWIDTH AND FULLWIDTH FORMS/ .. @@ -514,57 +562,67 @@ punct / ..;..;..;;/ ..;;;..;..;/ ..;..;..;..;/ - ..;..;;..;/ + ..;..;..;/ ..;..;;;..;/ ..;..;..;;;/ ..;..;..;..;/ ..;;..;..;/ - ..;;..;;..;/ + ..;;..;;..;/ ..;..;;..;/ ..;..;;..;/ - ..;..;..;..;/ + ..;..;;..;/ + ;..;/ ;..;..;..;/ - ..;;..;;..;/ + ..;;..;;..;/ ..;..;..;;;/ - ..;..;..;;/ + ..;..;..;;;/ ..;..;..;..;/ ..;..;..;;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;;..;;/ ..;;..;..;;/ ;;;..;;..;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;;;/ + ;..;..;/ ..;..;..;..;/ ..;..;..;..;/ ..;;..;..;;/ ..;..;;..;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;;..;/ + ..;..;..;..;/ + ..;/ + ..;..;;..;/ ..;..;..;..;/ - ;..;..;..;/ + ;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ;..;..;;;;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;;..;;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;;..;..;/ + ..;..;/ + ..;..;..;/ ..;..;..;..;/ ..;..;..;..;/ ..;..;;;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;/ ..;;;;..;/ - ..;..;;;..;/ - ..;..;..;..;/ + ..;;;..;..;/ + ..;..;;..;;/ + ..;..;/ + ..;;;..;/ + ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ ..;..;..;/ @@ -575,7 +633,7 @@ punct / ..;..;/ ..;..;/ ..;..;/ - ..;..;/ + ..;..;/ ..;..;/ ..;;;;;/ ;;;;;;/ @@ -583,52 +641,55 @@ punct / ..;.. graph / - ..;..;..;..;/ - ..;;..;..;/ - ..;..;..;..;/ + ..;..;..;/ + ..;;..;..;/ + ..;..;..;/ ..;..;..;..;/ - ..;..;..;;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;/ + ..;..;..;/ + ..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;;/ ..;..;..;..;/ ..;..;..;..;/ ..;..;..;;/ - ..;..;..;..;/ - ;..;..;..;/ + ..;..;..;;/ + ..;/ + ;..;..;..;/ ..;..;..;..;/ ..;..;..;..;/ ;..;..;;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ - ..;..;;..;/ + ..;..;;;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;/ ..;..;..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;;..;/ + ..;..;..;..;/ + ..;/ ..;;..;;..;/ ;..;..;..;/ ..;..;;..;;/ ;..;..;..;;/ ;..;..;..;/ ..;;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;;;/ + ..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ @@ -638,37 +699,43 @@ graph / ..;..;..;..;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;/ + ..;..;..;..;/ ..;..;..;..;/ ;;;..;..;/ ..;..;..;..;/ ..;..;;..;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ ..;..;;..;;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;;..;..;/ + ..;/ + ..;..;..;..;/ ..;..;..;;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ..;;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ;..;..;..;/ ..;..;..;..;/ @@ -677,6 +744,8 @@ graph / ..;..;/ ..;..;/ ..;..;/ + ..;..;/ + ..;..;/ ..;..;/ ..;..;/ ..;..;/ @@ -690,7 +759,7 @@ graph / ..;..;/ ..;..;/ ..;..;/ - ..;..;/ + ..;..;/ ..;..;/ ..;..;/ ..;;..;/ @@ -701,57 +770,61 @@ graph / ..;..;;/ ..;..;/ ..;..;/ + ..;..;/ ..;..;;/ ..;..;/ ..;.. print / - ..;..;..;..;/ - ..;;..;..;/ - ..;..;..;..;/ + ..;..;..;/ + ..;;..;..;/ + ..;..;..;/ ..;..;..;..;/ - ..;..;..;;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;/ + ..;..;..;/ + ..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;;/ ..;..;..;..;/ ..;..;..;..;/ ..;..;..;;/ - ..;..;..;..;/ - ;..;..;..;/ + ..;..;..;;/ + ..;/ + ;..;..;..;/ ..;..;..;..;/ ..;..;..;..;/ ;..;..;;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ - ..;..;;..;/ + ..;..;;;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;/ ..;..;..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;;..;/ + ..;..;..;..;/ + ..;/ ..;;..;;..;/ ;..;..;..;/ ..;..;;..;;/ ;..;..;..;;/ ;..;..;..;/ ..;;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;;;/ + ..;..;/ ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ @@ -761,37 +834,45 @@ print / ..;..;..;..;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;/ + ..;..;..;..;/ ..;..;..;..;/ ;;;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ ;..;;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;;/ + ..;/ + ..;..;..;..;/ + ..;..;..;..;/ ..;;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;..;..;/ + ..;..;..;/ + ..;..;..;..;/ + ;..;..;..;/ + ..;/ ..;..;..;..;/ ..;..;..;;/ ..;..;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ ..;..;;..;/ ..;..;..;..;/ ..;..;..;/ @@ -800,6 +881,8 @@ print / ..;..;/ ..;..;/ ..;..;/ + ..;..;/ + ..;..;/ ..;..;/ ..;..;/ ..;..;/ @@ -813,7 +896,7 @@ print / ..;..;/ ..;..;/ ..;..;/ - ..;..;/ + ..;..;/ ..;..;/ ..;..;/ ..;;..;/ @@ -824,6 +907,7 @@ print / ..;..;;/ ..;..;/ ..;..;/ + ..;..;/ ..;..;;/ ..;..;/ ..;.. @@ -844,7 +928,8 @@ toupper / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -889,13 +974,16 @@ toupper / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -943,7 +1031,9 @@ toupper / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -983,7 +1073,8 @@ toupper / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1032,6 +1123,7 @@ toupper / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ + (,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1139,7 +1231,8 @@ tolower / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1186,6 +1279,8 @@ tolower / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1223,7 +1318,8 @@ tolower / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1235,6 +1331,7 @@ tolower / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ + (,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1284,7 +1381,8 @@ tolower / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1431,7 +1529,9 @@ map "totitle"; / (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ - (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ (,);(,);(,);(,);/ @@ -1574,35 +1674,40 @@ map "totitle"; / % That is, all combining characters (level 2+3). class "combining"; / ..;..;..;..;/ - ;..;..;;..;/ + ;..;..;;..;/ ..;;..;..;/ ..;..;;..;/ ..;..;..;;/ ..;..;..;..;/ ;..;..;..;;/ ..;..;;..;/ - ..;..;..;..;/ + ..;..;;..;/ + ;..;/ ;..;..;..;/ - ..;..;;..;/ + ..;..;;..;/ ..;..;..;;/ - ..;..;..;;/ + ..;..;..;;;/ ..;..;..;..;/ - ..;..;;..;/ + ..;..;..;;/ + ..;/ ..;..;..;..;/ - ..;..;..;..;/ - ;..;;..;;/ - ..;..;;..;/ + ..;..;..;..;/ + ;..;..;;..;/ + ;..;..;;..;/ ..;;..;..;/ ..;..;;;;/ ..;..;..;..;/ - ..;;..;..;/ - ..;;..;..;/ + ..;;..;/ + ..;..;..;..;/ + ..;..;;/ + ;..;..;/ ..;..;..;;/ ..;;..;..;/ ..;..;..;..;/ - ..;..;..;..;/ - ..;..;..;;;/ - ;..;;..;..;/ + ..;..;..;..;/ + ..;..;..;..;/ + ..;;;;;/ + ;..;;..;..;/ ..;..;/ ..;..;;/ ..;..;/ @@ -1619,20 +1724,25 @@ class "combining_level3"; / ..;..;;..;/ ..;..;;..;/ ..;;..;..;/ - ..;..;..;;/ + ..;;..;;..;/ + ;/ ..;..;..;..;/ - ..;;..;..;/ + ..;;..;..;/ ..;..;;..;/ - ..;..;;..;/ + ..;..;;;..;/ ..;..;..;..;/ + ..;/ ..;;..;..;/ ..;..;..;..;/ - ..;..;..;;/ + ..;..;..;;/ + ..;/ ..;;..;;..;/ ..;;..;..;;/ ..;..;..;..;/ ..;;..;..;/ - ..;..;..;..;/ + ..;..;..;..;/ + ..;/ + ..;..;;..;/ ..;..;..;..;/ ..;..;..;..;/ ..;..;..;..;/ diff --git a/nscd/Makefile b/nscd/Makefile index f83e400..74df824 100644 --- a/nscd/Makefile +++ b/nscd/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1998,2000,2002,2003,2004,2005,2006,2007 +# Copyright (C) 1998,2000,2002,2003,2004,2005,2006,2007,2008 # Free Software Foundation, Inc. # This file is part of the GNU C Library. @@ -90,7 +90,8 @@ CFLAGS-nscd_initgroups.c = -fexceptions nscd-cflags = -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 ifeq (yesyes,$(have-fpie)$(build-shared)) -nscd-cflags += -fpie +#nscd-cflags += -fpie +nscd-cflags += -fpic endif ifeq (yes,$(have-ssp)) nscd-cflags += -fstack-protector diff --git a/nscd/aicache.c b/nscd/aicache.c index a69a778..2518f80 100644 --- a/nscd/aicache.c +++ b/nscd/aicache.c @@ -1,5 +1,5 @@ /* Cache handling for host lookup. - Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2004. @@ -262,7 +262,8 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, { dataset = (struct dataset *) mempool_alloc (db, total - + req->key_len); + + req->key_len, + IDX_result_data); if (dataset == NULL) ++db->head->addfailed; } @@ -338,7 +339,8 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, struct dataset *newp = (struct dataset *) mempool_alloc (db, total - + req->key_len); + + req->key_len, + IDX_result_data); if (__builtin_expect (newp != NULL, 1)) { /* Adjust pointer into the memory block. */ @@ -424,7 +426,8 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, if (fd != -1) TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); - dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len); + dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, + IDX_result_data); /* If we cannot permanently store the result, so be it. */ if (dataset != NULL) { diff --git a/nscd/cache.c b/nscd/cache.c index 12c4f01..b1dc2c5 100644 --- a/nscd/cache.c +++ b/nscd/cache.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1998, 1999, 2003-2006, 2007 Free Software Foundation, Inc. +/* Copyright (c) 1998, 1999, 2003-2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -155,11 +155,16 @@ cache_add (int type, const void *key, size_t len, struct datahead *packet, unsigned long int hash = __nis_hash (key, len) % table->head->module; struct hashentry *newp; - newp = mempool_alloc (table, sizeof (struct hashentry)); + newp = mempool_alloc (table, sizeof (struct hashentry), IDX_record_data); /* If we cannot allocate memory, just do not do anything. */ if (newp == NULL) { ++table->head->addfailed; + + /* Mark the in-flight memory as unused. */ + for (enum in_flight idx = 0; idx < IDX_record_data; ++idx) + mem_in_flight.block[idx].dbidx = -1; + return -1; } @@ -215,6 +220,10 @@ cache_add (int type, const void *key, size_t len, struct datahead *packet, else next_wakeup = table->wakeup_time; + /* Mark the in-flight memory as unused. */ + for (enum in_flight idx = 0; idx < IDX_last; ++idx) + mem_in_flight.block[idx].dbidx = -1; + return 0; } diff --git a/nscd/connections.c b/nscd/connections.c index 5da5e5f..64c82cb 100644 --- a/nscd/connections.c +++ b/nscd/connections.c @@ -225,6 +225,11 @@ static int sock; /* Number of times clients had to wait. */ unsigned long int client_queued; +/* Data structure for recording in-flight memory allocation. */ +__thread struct mem_in_flight mem_in_flight; +/* Global list of the mem_in_flight variables of all the threads. */ +struct mem_in_flight *mem_in_flight_list; + ssize_t writeall (int fd, const void *buf, size_t len) @@ -964,7 +969,7 @@ send_ro_fd (struct database_dyn *db, char *key, int fd) /* Handle new request. */ static void -handle_request (int fd, request_header *req, void *key, uid_t uid) +handle_request (int fd, request_header *req, void *key, uid_t uid, pid_t pid) { if (__builtin_expect (req->version, NSCD_VERSION) != NSCD_VERSION) { @@ -979,7 +984,31 @@ cannot handle old request version %d; current version is %d"), if (selinux_enabled && nscd_request_avc_has_perm (fd, req->type) != 0) { if (debug_level > 0) - dbg_log (_("request not handled due to missing permission")); + { +#ifdef SO_PEERCRED +# ifdef PATH_MAX + char buf[PATH_MAX]; +# else + char buf[4096]; +# endif + + snprintf (buf, sizeof (buf), "/proc/%ld/exe", (long int) pid); + ssize_t n = readlink (buf, buf, sizeof (buf) - 1); + + if (n <= 0) + dbg_log (_("\ +request from %ld not handled due to missing permission"), (long int) pid); + else + { + buf[n] = '\0'; + dbg_log (_("\ +request from '%s' [%ld] not handled due to missing permission"), + buf, (long int) pid); + } +#else + dbg_log (_("request not handled due to missing permission")); +#endif + } return; } @@ -1426,6 +1455,16 @@ nscd_run_worker (void *p) { char buf[256]; + /* Initialize the memory-in-flight list. */ + for (enum in_flight idx = 0; idx < IDX_last; ++idx) + mem_in_flight.block[idx].dbidx = -1; + /* And queue this threads structure. */ + do + mem_in_flight.next = mem_in_flight_list; + while (atomic_compare_and_exchange_bool_acq (&mem_in_flight_list, + &mem_in_flight, + mem_in_flight.next) != 0); + /* Initial locking. */ pthread_mutex_lock (&readylist_lock); @@ -1491,6 +1530,8 @@ nscd_run_worker (void *p) if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &caller, &optlen) == 0) pid = caller.pid; } +#else + const pid_t pid = 0; #endif /* It should not be possible to crash the nscd with a silly @@ -1531,7 +1572,7 @@ handle_request: request received (Version = %d)"), req.version); } /* Phew, we got all the data, now process it. */ - handle_request (fd, &req, keybuf, uid); + handle_request (fd, &req, keybuf, uid, pid); } close_and_out: diff --git a/nscd/grpcache.c b/nscd/grpcache.c index 002f04f..dbc406f 100644 --- a/nscd/grpcache.c +++ b/nscd/grpcache.c @@ -1,5 +1,5 @@ /* Cache handling for group lookup. - Copyright (C) 1998-2005, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1998-2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -113,7 +113,8 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); - dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len); + dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, + IDX_result_data); /* If we cannot permanently store the result, so be it. */ if (dataset != NULL) { @@ -204,7 +205,8 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req, if (he == NULL) { - dataset = (struct dataset *) mempool_alloc (db, total + n); + dataset = (struct dataset *) mempool_alloc (db, total + n, + IDX_result_data); if (dataset == NULL) ++db->head->addfailed; } @@ -274,7 +276,8 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req, /* We have to create a new record. Just allocate appropriate memory and copy it. */ struct dataset *newp - = (struct dataset *) mempool_alloc (db, total + n); + = (struct dataset *) mempool_alloc (db, total + n, + IDX_result_data); if (newp != NULL) { /* Adjust pointers into the memory block. */ diff --git a/nscd/hstcache.c b/nscd/hstcache.c index cc04158..b93d418 100644 --- a/nscd/hstcache.c +++ b/nscd/hstcache.c @@ -1,5 +1,5 @@ /* Cache handling for host lookup. - Copyright (C) 1998-2005, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1998-2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -121,7 +121,8 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); - dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len); + dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, + IDX_result_data); /* If we cannot permanently store the result, so be it. */ if (dataset != NULL) { @@ -226,7 +227,8 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, if (he == NULL && h_addr_list_cnt == 1) { dataset = (struct dataset *) mempool_alloc (db, - total + req->key_len); + total + req->key_len, + IDX_result_data); if (dataset == NULL) ++db->head->addfailed; } @@ -312,7 +314,8 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, appropriate memory and copy it. */ struct dataset *newp = (struct dataset *) mempool_alloc (db, - total + req->key_len); + total + req->key_len, + IDX_result_data); if (newp != NULL) { /* Adjust pointers into the memory block. */ diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c index 157cd78..4d6513b 100644 --- a/nscd/initgrcache.c +++ b/nscd/initgrcache.c @@ -1,5 +1,5 @@ /* Cache handling for host lookup. - Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2004. @@ -197,7 +197,8 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); - dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len); + dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, + IDX_result_data); /* If we cannot permanently store the result, so be it. */ if (dataset != NULL) { @@ -259,7 +260,8 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, if (he == NULL) { dataset = (struct dataset *) mempool_alloc (db, - total + req->key_len); + total + req->key_len, + IDX_result_data); if (dataset == NULL) ++db->head->addfailed; } @@ -329,7 +331,8 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, /* We have to create a new record. Just allocate appropriate memory and copy it. */ struct dataset *newp - = (struct dataset *) mempool_alloc (db, total + req->key_len); + = (struct dataset *) mempool_alloc (db, total + req->key_len, + IDX_result_data); if (newp != NULL) { /* Adjust pointer into the memory block. */ diff --git a/nscd/mem.c b/nscd/mem.c index 048e3dd..14928d6 100644 --- a/nscd/mem.c +++ b/nscd/mem.c @@ -1,5 +1,5 @@ /* Cache memory handling. - Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2004. @@ -197,6 +197,31 @@ gc (struct database_dyn *db) } assert (cnt == db->head->nentries); + /* Go through the list of in-flight memory blocks. */ + struct mem_in_flight *mrunp = mem_in_flight_list; + while (mrunp != NULL) + { + /* NB: There can be no race between this test and another thread + setting the field to the index we are looking for because + this would require the other thread to also have the memlock + for the database. + + NB2: we do not have to look at latter blocks (higher indices) if + earlier blocks are not in flight. They are always allocated in + sequence. */ + for (enum in_flight idx = IDX_result_data; + idx < IDX_last && mrunp->block[idx].dbidx == db - dbs; ++idx) + { + assert ((char *) mrunp->block[idx].blockaddr > db->data); + assert ((char *) mrunp->block[idx].blockaddr + + mrunp->block[0].blocklen <= db->data + db->memsize); + markrange (mark, (char *) mrunp->block[idx].blockaddr - db->data, + mrunp->block[idx].blocklen); + } + + mrunp = mrunp->next; + } + /* Sort the entries by the addresses of the referenced data. All the entries pointing to the same DATAHEAD object will have the same key. Stability of the sorting is unimportant. */ @@ -503,7 +528,7 @@ gc (struct database_dyn *db) void * -mempool_alloc (struct database_dyn *db, size_t len) +mempool_alloc (struct database_dyn *db, size_t len, enum in_flight idx) { /* Make sure LEN is a multiple of our maximum alignment so we can keep track of used memory is multiples of this alignment value. */ @@ -567,6 +592,12 @@ mempool_alloc (struct database_dyn *db, size_t len) db->head->first_free += len; db->last_alloc_failed = false; + + /* Remember that we have allocated this memory. */ + assert (idx >= 0 && idx < IDX_last); + mem_in_flight.block[idx].dbidx = db - dbs; + mem_in_flight.block[idx].blocklen = len; + mem_in_flight.block[idx].blockaddr = res; } pthread_mutex_unlock (&db->memlock); diff --git a/nscd/nscd.h b/nscd/nscd.h index ec2d945..cbea8e1 100644 --- a/nscd/nscd.h +++ b/nscd/nscd.h @@ -181,6 +181,31 @@ extern uid_t old_uid; extern gid_t old_gid; +/* Memory allocation in flight. Each thread can have a limited number + of allocation in flight. No need to create dynamic data + structures. We use fixed indices. */ +enum in_flight + { + IDX_result_data = 0, + /* Keep the IDX_record_data entry last at all times. */ + IDX_record_data = 1, + IDX_last + }; +extern __thread struct mem_in_flight +{ + struct + { + int dbidx; + nscd_ssize_t blocklen; + void *blockaddr; + } block[IDX_last]; + + struct mem_in_flight *next; +} mem_in_flight; +/* Global list of the mem_in_flight variables of all the threads. */ +extern struct mem_in_flight *mem_in_flight_list; + + /* Prototypes for global functions. */ /* nscd.c */ @@ -271,7 +296,8 @@ extern void readdservbyport (struct database_dyn *db, struct hashentry *he, struct datahead *dh); /* mem.c */ -extern void *mempool_alloc (struct database_dyn *db, size_t len); +extern void *mempool_alloc (struct database_dyn *db, size_t len, + enum in_flight idx); extern void gc (struct database_dyn *db); diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c index bc1b6ba..e1bf6e9 100644 --- a/nscd/pwdcache.c +++ b/nscd/pwdcache.c @@ -1,5 +1,5 @@ /* Cache handling for passwd lookup. - Copyright (C) 1998-2005, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1998-2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -120,7 +120,8 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); - dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len); + dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, + IDX_result_data); /* If we cannot permanently store the result, so be it. */ if (dataset != NULL) { @@ -199,7 +200,8 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, if (he == NULL) { - dataset = (struct dataset *) mempool_alloc (db, total + n); + dataset = (struct dataset *) mempool_alloc (db, total + n, + IDX_result_data); if (dataset == NULL) ++db->head->addfailed; } @@ -270,7 +272,8 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, /* We have to create a new record. Just allocate appropriate memory and copy it. */ struct dataset *newp - = (struct dataset *) mempool_alloc (db, total + n); + = (struct dataset *) mempool_alloc (db, total + n, + IDX_result_data); if (newp != NULL) { /* Adjust pointer into the memory block. */ diff --git a/nscd/servicescache.c b/nscd/servicescache.c index e122cb3..164b6e2 100644 --- a/nscd/servicescache.c +++ b/nscd/servicescache.c @@ -1,5 +1,5 @@ /* Cache handling for services lookup. - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2007. @@ -103,7 +103,8 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, total, MSG_NOSIGNAL)); - dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len); + dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, + IDX_result_data); /* If we cannot permanently store the result, so be it. */ if (dataset != NULL) { @@ -190,7 +191,8 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req, if (he == NULL) { dataset = (struct dataset *) mempool_alloc (db, - total + req->key_len); + total + req->key_len, + IDX_result_data); if (dataset == NULL) ++db->head->addfailed; } @@ -261,7 +263,8 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req, /* We have to create a new record. Just allocate appropriate memory and copy it. */ struct dataset *newp - = (struct dataset *) mempool_alloc (db, total + req->key_len); + = (struct dataset *) mempool_alloc (db, total + req->key_len, + IDX_result_data); if (newp != NULL) { /* Adjust pointers into the memory block. */ -- 2.7.4