r3936 - trunk/src/target/opkg

thomas at sita.openmoko.org thomas at sita.openmoko.org
Wed Jan 23 13:43:56 CET 2008


Author: thomas
Date: 2008-01-23 13:43:55 +0100 (Wed, 23 Jan 2008)
New Revision: 3936

Modified:
   trunk/src/target/opkg/pkg_vec.c
Log:
opkg: apply "2-pkg-vec--Optimize-gross-inefficiency.patch" from OpenEmbedded

  pkg_vec: Optimize gross inefficiency.

  This module tries to implement *unique* vector (without duplicating objects),
  and does this by iterating thru all already existing elements.  Thus,
  complexity of adding N elements was O(N^2). However, there're no grave reasons
  to do uniqueness at all:

  1. First of all, if feeds are correct, there won't be duplicates.
  2. Then, even if there will be, there won't be serious problems like
     segfaults.
  3. Finally, for quite a few operations vectors is constructed from a
     hashtable, thus uniqueness is guaranteed (which reduces possible cases of
     non-uniqueness to values of Depends: and friends).

  All an all, remove dup check, and make ipkg work order of magnitude faster on
  a feed with few thousands of packages.




Modified: trunk/src/target/opkg/pkg_vec.c
===================================================================
--- trunk/src/target/opkg/pkg_vec.c	2008-01-23 12:34:44 UTC (rev 3935)
+++ trunk/src/target/opkg/pkg_vec.c	2008-01-23 12:43:55 UTC (rev 3936)
@@ -104,6 +104,7 @@
      int i;
      int found = 0;
 
+#if 0
      /* look for a duplicate pkg by name, version, and architecture */
      for (i = 0; i < vec->len; i++)
 	  if ((strcmp(pkg->name, vec->pkgs[i]->name) == 0)
@@ -112,6 +113,7 @@
 	       found = 1;
 	       break;
 	  }
+#endif
 
      /* we didn't find one, add it */
      if(!found){   
@@ -191,6 +193,7 @@
 {
     int i;
 
+#if 0
     /* look for a duplicate pkg by name */
     for(i = 0; i < vec->len; i++)
 	if (strcmp(pkg->name, vec->pkgs[i]->name) == 0)
@@ -198,12 +201,15 @@
 
     /* we didn't find one, add it */
     if(i == vec->len){   
+#endif
 	vec->pkgs = 
 	  (abstract_pkg_t **)
 	    realloc(vec->pkgs, (vec->len + 1) * sizeof(abstract_pkg_t *));
 	vec->pkgs[vec->len] = pkg;
 	vec->len++;
+#if 0
     }
+#endif
 }
 
 abstract_pkg_t * abstract_pkg_vec_get(abstract_pkg_vec_t *vec, int i)





More information about the commitlog mailing list