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

Reply via email to