* nscd/mem.c (gc): Correctly determine highest used array element
authorUlrich Drepper <drepper@redhat.com>
Sun, 18 May 2008 04:25:44 +0000 (04:25 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 18 May 2008 04:25:44 +0000 (04:25 +0000)
in mark.

ChangeLog
nscd/mem.c

index 1aa2a36..e17090f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2008-05-17  Ulrich Drepper  <drepper@redhat.com>
 
+       * nscd/mem.c (gc): Correctly determine highest used array element
+       in mark.
+
        * nscd/mem.c (markrange): Add assert to check entries are all
        aligned.  Small cleanup in bitmap use.
 
index 0bcb2aa..bf3777d 100644 (file)
@@ -131,8 +131,8 @@ gc (struct database_dyn *db)
   size_t stack_used = sizeof (bool) * db->head->module;
   if (__builtin_expect (stack_used > MAX_STACK_USE, 0))
     stack_used = 0;
-  size_t memory_needed = ((db->head->first_free / BLOCK_ALIGN + BITS - 1)
-                         / BITS) * sizeof (BITMAP_T);
+  size_t nmark = (db->head->first_free / BLOCK_ALIGN + BITS - 1) / BITS;
+  size_t memory_needed = nmark * sizeof (BITMAP_T);
   if (stack_used + memory_needed <= MAX_STACK_USE)
     {
       mark = (BITMAP_T *) alloca (memory_needed);
@@ -234,7 +234,7 @@ gc (struct database_dyn *db)
   qsort (he, cnt, sizeof (struct hashentry *), sort_he);
 
   /* Determine the highest used address.  */
-  size_t high = sizeof (mark);
+  size_t high = nmark;
   while (high > 0 && mark[high - 1] == 0)
     --high;