[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#38393: dpkg: dpkg assertion failure: process_queue: Assertion `dependtry <= 4' failed. (+ possible patch)



Package: dpkg
Version: 1.4.1.1

As mentioned in the subject, dpkg dies with an assertion failure.  I
spent some time trying to track this down, and I believe I know what's
happening.

The relevant information is here:

Package: cmucl
Status: install ok unpacked
Depends: libc6 (>= 2.1), lisp-core

Package: cmucl-small
Status: install ok unpacked
Provides: lisp-core
Depends: cmucl

As you can see, there is a dependency cycle (cmucl -> lisp-core ->
cmucl-small -> cmucl) that goes through a virtual package.  As far as
I can tell, depcon.c:findbreakcycle() -- the function which is
supposed to break dependency cycles and allow dpkg to proceed -- does
not correctly handle this case.  When it's tracking down the
dependencies of cmucl to find cycles, it notices the lisp-core
dependency, but ignores it because of the following code:
      /* We can't have any cycles involving packages we're not trying
       * to do anything with.
       */
      if (possi->ed->clientdata->istobe == itb_normal) continue;
The lisp-core virtual package does have 
clientdata->istobe == itb_normal, so the code farther down in this
function which checks for virtual package providers is never run.

So my patch is just to comment out that code:
--- ORIG-depcon.c       Wed May 26 22:21:34 1999
+++ depcon.c    Wed May 26 22:21:38 1999
@@ -104,10 +104,12 @@
   for (dep= pkg->installed.depends; dep; dep= dep->next) {
     if (dep->type != dep_depends && dep->type != dep_predepends) continue;
     for (possi= dep->list; possi; possi= possi->next) {
+#if 0
       /* We can't have any cycles involving packages we're not trying
        * to do anything with.
        */
       if (possi->ed->clientdata->istobe == itb_normal) continue;
+#endif
       /* Don't find the same cycles again. */
       if (possi->cyclebreak) continue;
       thislink.possi= possi;

This patch does fix the assertion failure and allow configuration to
proceed in my case.

Carl Witty

-- System Information
Debian Release: potato
Kernel Version: Linux nebula 2.0.35 #1 Thu Nov 19 00:04:16 PST 1998 i686 unknown

Versions of the packages dpkg depends on:
ii  libc6           2.1.1-7        GNU C Library: Shared libraries and timezone
ii  libncurses4     4.2-3.2        Shared libraries for terminal handling
ii  libstdc++2.9    2.91.61-1      The GNU stdc++ library (egcs version)


Reply to: