]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Add POOL_FLAG_NOWHATPROVIDESAUX pool flag
authorMichael Schroeder <mls@suse.de>
Fri, 29 May 2015 11:28:06 +0000 (13:28 +0200)
committerMichael Schroeder <mls@suse.de>
Fri, 29 May 2015 11:28:06 +0000 (13:28 +0200)
The whatprovidesaux data takes up a lot of mem, so if mem is rare
you can turn it off now.

ext/testcase.c
src/pool.c
src/pool.h

index d2b79d63bbf10403b4a69a9d3045f7ff993057eb..251cd2feb471618895de00002b4d120dd97d5665 100644 (file)
@@ -128,6 +128,7 @@ static struct poolflags2str {
   { POOL_FLAG_HAVEDISTEPOCH,                "havedistepoch", 0 },
   { POOL_FLAG_NOOBSOLETESMULTIVERSION,      "noobsoletesmultiversion", 0 },
   { POOL_FLAG_ADDFILEPROVIDESFILTERED,      "addfileprovidesfiltered", 0 },
+  { POOL_FLAG_NOWHATPROVIDESAUX,            "nowhatprovidesaux", 0 },
   { 0, 0, 0 }
 };
 
index 174a86330ee2831e6b7b5ebf6aea3baa093e3234..f78f71ad4892b51627deb0aac8885a1e109d8608 100644 (file)
@@ -194,6 +194,8 @@ pool_get_flag(Pool *pool, int flag)
       return pool->noobsoletesmultiversion;
     case POOL_FLAG_ADDFILEPROVIDESFILTERED:
       return pool->addfileprovidesfiltered;
+    case POOL_FLAG_NOWHATPROVIDESAUX:
+      return pool->nowhatprovidesaux;
     default:
       break;
     }
@@ -236,6 +238,9 @@ pool_set_flag(Pool *pool, int flag, int value)
     case POOL_FLAG_ADDFILEPROVIDESFILTERED:
       pool->addfileprovidesfiltered = value;
       break;
+    case POOL_FLAG_NOWHATPROVIDESAUX:
+      pool->nowhatprovidesaux = value;
+      break;
     default:
       break;
     }
@@ -508,10 +513,13 @@ pool_createwhatprovides(Pool *pool)
 
   /* alloc aux vector */
   whatprovidesauxdata = 0;
-  pool->whatprovidesaux = whatprovidesaux = solv_calloc(num, sizeof(Offset));
-  pool->whatprovidesauxoff = num;
-  pool->whatprovidesauxdataoff = off;
-  pool->whatprovidesauxdata = whatprovidesauxdata = solv_calloc(pool->whatprovidesauxdataoff, sizeof(Id));
+  if (!pool->nowhatprovidesaux)
+    {
+      pool->whatprovidesaux = whatprovidesaux = solv_calloc(num, sizeof(Offset));
+      pool->whatprovidesauxoff = num;
+      pool->whatprovidesauxdataoff = off;
+      pool->whatprovidesauxdata = whatprovidesauxdata = solv_calloc(pool->whatprovidesauxdataoff, sizeof(Id));
+    }
 
   /* now fill data for all provides */
   for (i = pool->nsolvables - 1; i > 0; i--)
index 409de0570bb1da268528a948a3c274b42c5d0aa3..42246af253da5fa19865d80bd2b3698373e50dfb 100644 (file)
@@ -160,6 +160,7 @@ struct _Pool {
   int addfileprovidesfiltered; /* 1: only use filtered file list for addfileprovides */
   int addedfileprovides;       /* true: application called addfileprovides */
   Queue lazywhatprovidesq;     /* queue to store old whatprovides offsets */
+  int nowhatprovidesaux;       /* don't allocate and use the whatprovides aux helper */
 #endif
 };
 
@@ -195,6 +196,7 @@ struct _Pool {
 #define POOL_FLAG_NOOBSOLETESMULTIVERSION              8
 #define POOL_FLAG_ADDFILEPROVIDESFILTERED              9
 #define POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS           10
+#define POOL_FLAG_NOWHATPROVIDESAUX                    11
 
 /* ----------------------------------------------- */