about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2008-05-18 03:57:19 +0000
committerUlrich Drepper <drepper@redhat.com>2008-05-18 03:57:19 +0000
commit8884028c8e09ebcfb61634f212b62349606784aa (patch)
tree8121c35a6b5b766dd7bf656b12efdfe29bb11586
parentb21595750e4feda0c0478579070d98f41b4f845f (diff)
downloadglibc-8884028c8e09ebcfb61634f212b62349606784aa.tar.gz
glibc-8884028c8e09ebcfb61634f212b62349606784aa.tar.xz
glibc-8884028c8e09ebcfb61634f212b62349606784aa.zip
* nscd/nscd.h (mem_in_flight): Replace blockaddr field with
	blockoff of type nscd_ssize_t.
	* nscd/mem.c (gc): Simplify markrange call for on-flight blocks.
	(mempoll_alloc): Record block offset and not address.
-rw-r--r--ChangeLog5
-rw-r--r--nscd/mem.c22
-rw-r--r--nscd/nscd.h2
3 files changed, 18 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 315b472b89..e0ef19b9db 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2008-05-17  Ulrich Drepper  <drepper@redhat.com>
 
+	* nscd/nscd.h (mem_in_flight): Replace blockaddr field with
+	blockoff of type nscd_ssize_t.
+	* nscd/mem.c (gc): Simplify markrange call for on-flight blocks.
+	(mempoll_alloc): Record block offset and not address.
+
 	* nscd/mem.c (gc): Fix test for stack overuse.
 
 	* nscd/aicache.c (addhstaiX): Fix a few small problems, cleanups,
diff --git a/nscd/mem.c b/nscd/mem.c
index 21f2ae821d..903f91f18b 100644
--- a/nscd/mem.c
+++ b/nscd/mem.c
@@ -212,11 +212,12 @@ gc (struct database_dyn *db)
       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);
+	  assert (mrunp->block[idx].blockoff >= 0);
+	  assert (mrunp->block[idx].blocklen < db->memsize);
+	  assert (mrunp->block[idx].blockoff
+		  + mrunp->block[0].blocklen <= db->memsize);
+	  markrange (mark, mrunp->block[idx].blockoff,
+		     mrunp->block[idx].blocklen);
 	}
 
       mrunp = mrunp->next;
@@ -589,15 +590,16 @@ mempool_alloc (struct database_dyn *db, size_t len, enum in_flight idx)
     }
   else
     {
-      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;
+      mem_in_flight.block[idx].blockoff = db->head->first_free;
+
+      db->head->first_free += len;
+
+      db->last_alloc_failed = false;
+
     }
 
   pthread_mutex_unlock (&db->memlock);
diff --git a/nscd/nscd.h b/nscd/nscd.h
index 66813e7480..b024017fd4 100644
--- a/nscd/nscd.h
+++ b/nscd/nscd.h
@@ -197,7 +197,7 @@ extern __thread struct mem_in_flight
   {
     int dbidx;
     nscd_ssize_t blocklen;
-    void *blockaddr;
+    nscd_ssize_t blockoff;
   } block[IDX_last];
 
   struct mem_in_flight *next;