You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by be...@apache.org on 2004/04/11 20:10:49 UTC

cvs commit: apr-util/hooks apr_hooks.c

ben         2004/04/11 11:10:49

  Modified:    hooks    Tag: APU_0_9_BRANCH apr_hooks.c
  Log:
  Make the topological sort pull out-of-order items to the front, instead of
  pushing them to the back. This makes things stay where they want to be better.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.47.2.2  +24 -2     apr-util/hooks/apr_hooks.c
  
  Index: apr_hooks.c
  ===================================================================
  RCS file: /home/cvs/apr-util/hooks/apr_hooks.c,v
  retrieving revision 1.47.2.1
  retrieving revision 1.47.2.2
  diff -u -r1.47.2.1 -r1.47.2.2
  --- apr_hooks.c	13 Feb 2004 09:52:42 -0000	1.47.2.1
  +++ apr_hooks.c	11 Apr 2004 18:10:49 -0000	1.47.2.2
  @@ -126,6 +126,13 @@
       return pData;
   }
   
  +/* Topologically sort, dragging out-of-order items to the front. Note that
  +   this tends to preserve things that want to be near the front better, and
  +   changing that behaviour might compromise some of Apache's behaviour (in
  +   particular, mod_log_forensic might otherwise get pushed to the end, and
  +   core.c's log open function used to end up at the end when pushing items
  +   to the back was the methedology).
  +*/
   static TSort *tsort(TSort *pData,int nItems)
   {
       int nTotal;
  @@ -138,9 +145,23 @@
   	for(n=0 ; ; ++n) {
   	    if(n == nItems)
   		assert(0);      /* we have a loop... */
  -	    if(!pData[n].pNext && !pData[n].nPredecessors)
  +	    if(!pData[n].pNext)
   		break;
   	}
  +	if(pData[n].nPredecessors) {
  +	    for(k=0 ; ; ++k) {
  +		assert(k < nItems);
  +		if(pData[n].ppPredecessors[k])
  +		    break;
  +	    }
  +	    for(i=0 ; ; ++i) {
  +		assert(i < nItems);
  +		if(&pData[i] == pData[n].ppPredecessors[k]) {
  +		    n=i;
  +		    break;
  +		}
  +	    }
  +	}
   	if(pTail)
   	    pTail->pNext=&pData[n];
   	else
  @@ -148,9 +169,10 @@
   	pTail=&pData[n];
   	pTail->pNext=pTail;     /* fudge it so it looks linked */
   	for(i=0 ; i < nItems ; ++i)
  -	    for(k=0 ; pData[i].ppPredecessors[k] ; ++k)
  +	    for(k=0 ; k < nItems ; ++k)
   		if(pData[i].ppPredecessors[k] == &pData[n]) {
   		    --pData[i].nPredecessors;
  +		    pData[i].ppPredecessors[k]=NULL;
   		    break;
   		}
       }
  
  
  

Re: cvs commit: apr-util/hooks apr_hooks.c

Posted by Ben Laurie <be...@algroup.co.uk>.
Jeff Trawick wrote:

> ben@apache.org wrote:
> 
>> ben         2004/04/11 11:10:49
>>
>>   Modified:    hooks    Tag: APU_0_9_BRANCH apr_hooks.c
>>   Log:
>>   Make the topological sort pull out-of-order items to the front, 
>> instead of
>>   pushing them to the back. This makes things stay where they want to 
>> be better.
> 
> 
> Don't these several commits need to go into the main branch as well?

Yep. I thought I'd wait for any screams before I screwed up both branches!

-- 
http://www.apache-ssl.org/ben.html       http://www.thebunker.net/

"There is no limit to what a man can do or how far he can go if he
doesn't mind who gets the credit." - Robert Woodruff

Re: cvs commit: apr-util/hooks apr_hooks.c

Posted by Jeff Trawick <tr...@attglobal.net>.
ben@apache.org wrote:
> ben         2004/04/11 11:10:49
> 
>   Modified:    hooks    Tag: APU_0_9_BRANCH apr_hooks.c
>   Log:
>   Make the topological sort pull out-of-order items to the front, instead of
>   pushing them to the back. This makes things stay where they want to be better.

Don't these several commits need to go into the main branch as well?