+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
{
/* 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);
{
/* 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);
time_t start_time;
+uintptr_t pagesize_m1;
+
static int check_pid (const char *file);
static int write_pid (const char *file);
/* Remember when we started. */
start_time = time (NULL);
+ /* Determine page size. */
+ pagesize_m1 = getpagesize () - 1;
+
/* Behave like a daemon. */
if (go_background)
{
means unlimited. */
extern unsigned int reload_count;
+/* Pagesize minus one. */
+extern uintptr_t pagesize_m1;
+
/* Prototypes for global functions. */
/* nscd.c */
{
/* 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);