]> err.no Git - dpkg/commitdiff
Fix dependency cycle breaking in the case when every link involves
authorGuillem Jover <guillem@debian.org>
Sun, 4 Jun 2006 15:42:01 +0000 (15:42 +0000)
committerGuillem Jover <guillem@debian.org>
Sun, 4 Jun 2006 15:42:01 +0000 (15:42 +0000)
a Provides (Ian Jackson). This is a proper fix for #349442.
Closes: #370017
ChangeLog
debian/changelog
src/depcon.c

index 50e9b9ff79c4097904f6628edecb48bd845dbe50..0447bf6d5baebf73b9be281f7f2bc8fe6598097a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-06-04  Ian Jackson  <ian@davenant.greenend.org.uk>
+
+       * src/depcon.c (foundcyclebroken): Replace possi->ed argument to
+       findbreakcyclerecursive call with dependedon.
+       (findbreakcyclerecursive): Remove the last foundcyclebroken call
+       which was wrongly using the unrelated provider->installed.depended
+       linked list. Remove findbreakcyclerecursive call which may lead to
+       infinite recursion.
+
 2006-06-04  Guillem Jover  <guillem@debian.org>
 
        * scripts/dpkg-parsechangelog.pl: Pass forward the '-l' option to
index 5ffdceb65eb687c6e67a5db199c8b9690eea1567..7a892a3502ad7653249ce18bc6bd78a35ff53961 100644 (file)
@@ -10,6 +10,9 @@ dpkg (1.13.21~) UNRELEASED; urgency=low
     Closes: #369928, #369958, #370157, #370174, #370210
   * Print the correct file being parsed by dpkg-parsechangelog's debian
     parser. Closes: #368961
+  * Fix dependency cycle breaking in the case when every link involves
+    a Provides (Ian Jackson). This is a proper fix for #349442.
+    Closes: #370017
 
   [ Updated dpkg Translations ]
   * Czech (Miroslav Kure).
index e8692d87172a671b799d5e694c8be00ae637e766..38530fab9cad08ef7f09e5e8da072b9f4bbe52b8 100644 (file)
@@ -56,7 +56,8 @@ static int foundcyclebroken(struct cyclesofarlink *thislink,
   for (sol=sofar; sol && sol->pkg != dependedon; sol=sol->back);
 
   /* If not, we do a recursive search on it to see what we find. */
-  if (!sol) return findbreakcyclerecursive(possi->ed,thislink);
+  if (!sol)
+    return findbreakcyclerecursive(dependedon, thislink);
   
   debug(dbg_depcon,"found cycle");
   /* Right, we now break one of the links.  We prefer to break
@@ -126,8 +127,6 @@ static int findbreakcyclerecursive(struct pkginfo *pkg, struct cyclesofarlink *s
          * still the one we use.
          */
         if (foundcyclebroken(&thislink,sofar,provider,possi)) return 1;
-       if (foundcyclebroken(&thislink,sofar,possi->ed,provider->installed.depended)) return 1;
-       if (findbreakcyclerecursive(provider,&thislink)) return 1;
       }
     }
   }