On Tue, 2008-01-08 at 16:19 +1300, Amos Jeffries wrote:

> As you say this is headed toward SMP/threading and that may cause any of 
> the scheduled steps to be run simultaneously or in a different order.

We will cross that bridge when/if we have to. For now, the order of
async events firing is guaranteed to be the same as their scheduling
order. A lot of Squid code depends on that guarantee.

> IMO in order to keep code flow same as before the async it needs to be 
> written something like this:
> 
> Using async calls the above become:
>    1) fd marked as closing, read and write handlers with COMM_ERR_CLOSING
>   parameter  scheduled for execution
> 
> after some time ...
>    - read/write handlers called with COMM_ERR_CLOSING
>    2) comm_close handlers scheduled for execution
> 
> after some more time ...
>    - comm_close handlers called
>    3) closing fd and initializing the fdc_table[fd] operations scheduled
>   for execution
> 
> And after even more time...
>   - The fd closed and fdc_table[fd] initialized.
> 
> Each step in the process scheduling the next as possible to keep them in 
> sequence. With no single step scheduling the entire lot as seperate 
> (possible async-reversable!) events.

I do not know what async-reversable is, but I think what you propose is
practically equivalent to Christos code because async events never get
out of order.

The only difference I can imagine is that in your scheme, a handler
called earlier (in step 2) can schedule another/new async call that will
be executed before handlers called in step 3. This should not make a
difference for correctly written handlers.

Cheers,

Alex.


> > Henrik Nordström wrote:
> >> And why is this needed? The sendComplete callback should be invalidated
> >> if the HTTP connection state is no longer there.
> >>
> >> Adding this reshedule adds a noticeable overhead an delay, plus makes
> >> tracing of the code flow more difficult.
> > 
> > The hope is that we are  gaining in stability and less complex code
> > in upper levels.
> > 
> 
> 

Reply via email to