# [whatwg] Race condition in media load algorithm

Ian Hickson ian at hixie.ch
Mon Aug 2 14:20:29 PDT 2010

```On Mon, 2 Aug 2010, Boris Zbarsky wrote:
> On 8/2/10 3:11 PM, Ian Hickson wrote:
> > > How are we defining "current asynchronous task" and "finish"?
> >
> > In terms of the event loop algorithm:
> >
> >     http://www.whatwg.org/specs/web-apps/current-work/complete/webappapis.html#processing-model-2
>
> Ah, I see.  Is the note there about synchronous sections having no
> side-effects something that is true by default due to the way
> synchronous sections are used in the specification?

Yeah. It's intended to help keep the ways to implement this somewhat open.

> > > How does this setup handle cases when the "current asynchronous task"
> > > spins the event loop, if at all?
> >
> > The spinning of the event loop is also defined in terms of the event loop
> > in a manner that strictly defines this:
> >
> >     http://www.whatwg.org/specs/web-apps/current-work/complete/webappapis.html#spin-the-event-loop
>
> I'm not sure I follow the steps here, actually.  Just to make sure I do
> understand....
>
> Say I have a task T in the event queue.  Task T begins some algorithm that has
> a synchronous section, then spins the event loop. If I understand the steps
> in #processing-model-2 correctly, the synchronous sections would run after
> task T completes, not while task T is spinning the event loop?

The synchronous section would run as soon as the task span the event loop.
Spinning the event loop is defined essentially as being equivalent to
breaking the original task in two, one that does everything up to spinning
the event loop, and one that does everything after spinning the event
loop. You are effectively waiting for some condition to become true and
then queueing a task to run the continuation of the algorithm. It's just
more convenient to write the algorithms as one long set of steps rather
than having split them up into multiple algorithms that invoke each other
and pass state around.

> Or does "stop the currently running task" in #spin-the-event-loop imply

Yes.

> (Note: I still have a problem with the way "pause" is defined here, but
> I've raised that before, I believe.)

I think we all have a problem with "pause", but I don't know what we can
do about it. I don't have any pending feedback from you on this topic, as
far as I can tell.

--
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

```