]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 10 Sep 2004 23:56:29 +0000 (23:56 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 10 Sep 2004 23:56:29 +0000 (23:56 +0000)
2004-09-10  Ulrich Drepper  <drepper@redhat.com>

* nscd/nscd.c (pagesize_m1): New variable.
(main): Initialize it.
* nscd/nscd.h: Declare pagesize_m1.
* nscd/hstcache.c: Pass correctly aligned address to msync.
* nscd/grpcache.c: Likewise.
* nscd/pwdcache.c: Likewise.

ChangeLog
nscd/grpcache.c
nscd/hstcache.c
nscd/nscd.c
nscd/nscd.h
nscd/pwdcache.c

index 8d3e98e05feb8fae824343c9ab8a2029b53bccfb..f0c91e340d0b7775fcfe96b6ba5c005f62989711 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2004-09-10  Ulrich Drepper  <drepper@redhat.com>
+
+       * nscd/nscd.c (pagesize_m1): New variable.
+       (main): Initialize it.
+       * nscd/nscd.h: Declare pagesize_m1.
+       * nscd/hstcache.c: Pass correctly aligned address to msync.
+       * nscd/grpcache.c: Likewise.
+       * nscd/pwdcache.c: Likewise.
+
 2004-09-10  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
 
        * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Decrement
index 7315eece61bfb277a2cc38f7f126ccc8d89e5a42..d07693f1a43ec7d57f33f40860097914352914fb 100644 (file)
@@ -291,8 +291,13 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
        {
          /* If necessary, we also propagate the data to disk.  */
          if (db->persistent)
-           // XXX async OK?
-           msync (dataset, total + n, MS_ASYNC);
+           {
+             // XXX async OK?
+             uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1;
+             msync ((void *) pval,
+                    ((uintptr_t) dataset & pagesize_m1) + total + n,
+                    MS_ASYNC);
+           }
 
          /* Now get the lock to safely insert the records.  */
          pthread_rwlock_rdlock (&db->lock);
index 94568d0d2b4bdac4e8b74ace09bded14d338e9eb..78e29fb3d1eebd910bcc379345b0bbf7c9d5fcb4 100644 (file)
@@ -332,8 +332,13 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
        {
          /* If necessary, we also propagate the data to disk.  */
          if (db->persistent)
-           // XXX async OK?
-           msync (dataset, total + req->key_len, MS_ASYNC);
+           {
+             // XXX async OK?
+             uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1;
+             msync ((void *) pval,
+                    ((uintptr_t) dataset & pagesize_m1)
+                    + total + req->key_len, MS_ASYNC);
+           }
 
          addr_list_type = (hst->h_length == NS_INADDRSZ
                            ? GETHOSTBYADDR : GETHOSTBYADDRv6);
index f6b22d41797b9cde87ad234c99b723a37870a063..5c5c15598bb4a5fd35320dcdf51599e34d06515d 100644 (file)
@@ -76,6 +76,8 @@ static const char *conffile = _PATH_NSCDCONF;
 
 time_t start_time;
 
+uintptr_t pagesize_m1;
+
 static int check_pid (const char *file);
 static int write_pid (const char *file);
 
@@ -155,6 +157,9 @@ main (int argc, char **argv)
   /* Remember when we started.  */
   start_time = time (NULL);
 
+  /* Determine page size.  */
+  pagesize_m1 = getpagesize () - 1;
+
   /* Behave like a daemon.  */
   if (go_background)
     {
index 910fba33be3306ab650f98ca186f59d31ed2f639..d32f5fed47ee0296fc59f38cc8e1c60a12c6b2a2 100644 (file)
@@ -124,6 +124,9 @@ extern const size_t block_align;
    means unlimited.  */
 extern unsigned int reload_count;
 
+/* Pagesize minus one.  */
+extern uintptr_t pagesize_m1;
+
 /* Prototypes for global functions.  */
 
 /* nscd.c */
index b3227785aed8df62e2b09dd48caae610241f162e..2354b6d78a551dff584554c65ac8472b6cb8e362 100644 (file)
@@ -287,8 +287,13 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
        {
          /* If necessary, we also propagate the data to disk.  */
          if (db->persistent)
-           // XXX async OK?
-           msync (dataset, total + n, MS_ASYNC);
+           {
+             // XXX async OK?
+             uintptr_t pval = (uintptr_t) dataset & ~pagesize_m1;
+             msync ((void *) pval,
+                    ((uintptr_t) dataset & pagesize_m1) + total + n,
+                    MS_ASYNC);
+           }
 
          /* Now get the lock to safely insert the records.  */
          pthread_rwlock_rdlock (&db->lock);