Cut down the initial db checked hash allocation somewhat
authorPanu Matilainen <pmatilai@redhat.com>
Mon, 13 Dec 2010 12:53:35 +0000 (14:53 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Tue, 21 Dec 2010 09:48:27 +0000 (11:48 +0200)
- The instance numbers are often much much bigger than the number
  of actual packages, and the hash table grows automatically as needed
  so there's no need to over-allocate at the start. Apply some
  (fairly arbitrary) heuristics to limit the initial allocation size.
(cherry picked from commit e40a7c61c422e79838226c69cb84f7a624fa6127)

lib/rpmdb.c

index aa28081..02aef4a 100644 (file)
@@ -158,9 +158,9 @@ static dbiIndex rpmdbOpenIndex(rpmdb db, rpmDbiTagVal rpmtag, int flags)
        db->_dbi[dbix] = dbi;
        int verifyonly = (flags & RPMDB_FLAG_VERIFYONLY);
        if (dbiType(dbi) == DBI_PRIMARY) {
-           /* Allocate for current max header instance number + some reserve */
+           /* Allocate based on max header instance number + some reserve */
            if (!verifyonly && (db->db_checked == NULL)) {
-               db->db_checked = intHashCreate(1024 + pkgInstance(dbi, 0),
+               db->db_checked = intHashCreate(1024 + pkgInstance(dbi, 0) / 4,
                                                uintId, uintCmp, NULL);
            }
            /* If primary got created, we can safely run without fsync */