On Nov 30, 2012, at 3:47 PM, Jan Rękorajski <bagg...@pld-linux.org> wrote:
>> >> If this is the real problem, then the fix for infinite looping >> has little to do with namespaces at all. >> >> Yes: the iterator loop index on dependency sets is global. >> >> Which means that if something decrements the iterator index >> lower down, then the high level will continuously repeat. > > Thanks for clarification, I was thinking I must be seeing things ;) > >> Either the low level search has to save/restore loop indexes, >> or the high level loop needs its own copy. > > The real fix for the loop bug below. > Its a bit cleaner if you change the top-side to use a private loop index. FWIW: your patch is what RPM used to do, and was removed while looking at OpenMP annotated dependency solving with helgrind. I.e. I'm more interested in getting a proper iterator that is thread safe than sick hack-o-rounds these days. > BTW, did you look into the problem with triggers arguments? > Nope. I have yet to be convinced of what the root cause is: all you have been telling me is that RPM5 is buggy and I'm pretty sure the final solution has yet to be seen. 73 de Jeff > > --- rpm-5.4.10/lib/rpmal.c~ 2012-11-30 13:20:59.087249280 +0100 > +++ rpm-5.4.10/lib/rpmal.c 2012-11-30 21:20:20.856611761 +0100 > @@ -403,6 +403,7 @@ > const char * KName; > availablePackage alp; > int rc; > + int savedIx; > > if (keyp) *keyp = RPMAL_NOMATCH; > > @@ -450,10 +451,12 @@ > if (alp->provides != NULL) /* XXX can't happen */ > switch (match->type) { > case IET_PROVIDES: > + savedIx = rpmdsIx(alp->provides); > /* XXX single step on rpmdsNext to regenerate DNEVR string */ > (void) rpmdsSetIx(alp->provides, match->entryIx - 1); > if (rpmdsNext(alp->provides) >= 0) > rc = rpmdsCompare(alp->provides, ds); > + (void) rpmdsSetIx(alp->provides, savedIx); > > if (rc) > rpmdsNotify(ds, _("(added provide)"), 0); > > > -- > Jan Rękorajski | PLD/Linux > SysAdm | http://www.pld-linux.org/ > baggins<at>mimuw.edu.pl > baggins<at>pld-linux.org > _______________________________________________ > pld-devel-en mailing list > pld-devel-en@lists.pld-linux.org > http://lists.pld-linux.org/mailman/listinfo/pld-devel-en _______________________________________________ pld-devel-en mailing list pld-devel-en@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-devel-en