Included upstream --- x/lib/depends.c 2009/05/15 13:40:58 1.445 +++ y/lib/depends.c 2009/08/22 22:12:02 1.446 @@ -2216,9 +2216,6 @@ { rpmte q, qprev; - /* Mark the package as queued. */ - rpmteTSI(p)->tsi_queued = 1; - if ((*rp) == NULL) { /* 1st element */ /*@-dependenttrans@*/ /* FIX: double indirection */ (*rp) = (*qp) = p; @@ -2238,6 +2235,12 @@ /* XXX Insure removed after added. */ if (rpmteType(p) == TR_REMOVED && rpmteType(p) != rpmteType(q)) continue; + + /* XXX Follow all previous generations in the queue. */ + if (rpmteTSI(p)->tsi_queued > rpmteTSI(q)->tsi_queued) + continue; + + /* XXX Within a generation, queue behind more "important". */ if (rpmteTSI(q)->tsi_qcnt <= rpmteTSI(p)->tsi_qcnt) break; } @@ -2521,6 +2524,9 @@ if (rpmteTSI(p)->tsi_count != 0) continue; + + /* Mark the package as queued. */ + rpmteTSI(p)->tsi_queued = orderingCount + 1; rpmteTSI(p)->tsi_suc = NULL; addQ(p, &q, &r, prefcolor); qlen++; @@ -2584,6 +2590,8 @@ (void) rpmteSetParent(p, q); (void) rpmteSetDegree(q, rpmteDegree(q)+1); + /* Mark the package as queued. */ + rpmteTSI(p)->tsi_queued = orderingCount + 1; /* XXX TODO: add control bit. */ rpmteTSI(p)->tsi_suc = NULL; /*@-nullstate@*/ /* XXX FIX: rpmteTSI(q)->tsi_suc can be NULL. */