Skip to content

Commit 8047abb

Browse files
committed
Remove atomics, leave thread safety to implementation
1 parent db224d6 commit 8047abb

File tree

1 file changed

+41
-43
lines changed

1 file changed

+41
-43
lines changed

fetch.bs

+41-43
Original file line numberDiff line numberDiff line change
@@ -2708,20 +2708,18 @@ not <a for=Document>fully active</a>. It has the following <a for=struct>items</
27082708
<dt><dfn export for="deferred fetch record">request</dfn>
27092709
<dd>A <a for=/>request</a>.
27102710

2711-
<dt><dfn export for="deferred fetch record">inactivity deferred delay</dfn> (default null)
2711+
<dt><dfn export for="deferred fetch record">inactivity delay</dfn> (default null)
27122712
<dd>Null or a <a>duration</a>.
27132713

2714-
<dt><dfn export for="deferred fetch record">sent</dfn> (default false)
2715-
<dd>A boolean.
2716-
27172714
<dt><dfn export for="deferred fetch record">invoke state</dfn> (default "<code>deferred</code>")
27182715
<dd>
27192716
<p>"<code>deferred</code>", "<code>scheduled</code>", "<code>terminated</code>",
2720-
"<code>aborted</code>", or "<code>sent</code>".
2717+
"<code>aborted</code>", or "<code>activated</code>".
27212718

2722-
<p class=note>This value can be modified <a>in parallel</a>. To set it safely, use atomic
2723-
operations, e.g. atomically exchange the value (set it to the new value and return the new value
2724-
in one operation).
2719+
<p class=note>This value can be modified <a>in parallel</a>. There could be a race condition where
2720+
the <code>Document</code> object's <a for=/>event loop</a> might change it to
2721+
"<code>deferred</code>" at the same time that it is changed to "<code>activated</code>". UAs can
2722+
mitigate this race condition in an <a>implementation-defined</a> manner.
27252723
</dl>
27262724

27272725

@@ -2731,26 +2729,33 @@ not <a for=Document>fully active</a>. It has the following <a for=struct>items</
27312729
<dfn export for="fetch group" id=concept-fetch-group-terminate>terminated</dfn>:
27322730

27332731
<ol>
2734-
<li><p>For each <a for="fetch group">fetch record</a> <var>record</var> in <var>fetchGroup</var>'s
2735-
<a for="fetch group">fetch records</a>, if <var>record</var>'s <a for="fetch record">controller</a>
2736-
is non-null and <var>record</var>'s <a for="fetch record">request</a>'s <a>done flag</a> is unset
2737-
and <a for=request>keepalive</a> is false, <a for="fetch controller">terminate</a>
2738-
<var>record</var>'s <a for="fetch record">controller</a>.
2739-
2740-
<li><p><a for=list>For each</a> <a for="fetch group">deferred fetch record</a>
2741-
<var>deferredRecord</var> in <var>fetchGroup</var>'s
2742-
<a for="fetch group">deferred fetch records</a>: If the result of atomically exchanging the value
2743-
of <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> with
2744-
"<code>terminated</code>" is not "<code>sent</code>", then the user agent should
2745-
<a for=/>fetch</a> <var>deferredRecord</var>'s <a for="deferred fetch record">request</a>. The
2746-
exact time in which the <a for=/>fetch</a> takes place is <a>implementation-defined</a>.
2732+
<li><p><a for=list>For each</a> <a for="fetch group">fetch record</a> <var>record</var> of
2733+
<var>fetchGroup</var>'s <a for="fetch group">fetch records</a>, if <var>record</var>'s
2734+
<a for="fetch record">controller</a> is non-null and <var>record</var>'s
2735+
<a for="fetch record">request</a>'s <a>done flag</a> is unset and <a for=request>keepalive</a> is
2736+
false, <a for="fetch controller">terminate</a> <var>record</var>'s
2737+
<a for="fetch record">controller</a>.
2738+
2739+
<li>
2740+
<p><a for=list>For each</a> <a for="fetch group">deferred fetch record</a>
2741+
<var>deferredRecord</var> of <var>fetchGroup</var>'s
2742+
<a for="fetch group">deferred fetch records</a>:
2743+
2744+
<ol>
2745+
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> to
2746+
"<code>terminated</code>".
2747+
2748+
<li><p><a for=/>Fetch</a> <var>deferredRecord</var>'s
2749+
<a for="deferred fetch record">request</a>.
2750+
</ol>
2751+
</li>
27472752
</ol>
27482753

27492754
<p>When a <a for=fetch>fetch group</a> <var>fetchGroup</var> is
27502755
<dfn export for="fetch group" id=concept-fetch-group-deactivate>deactivated</dfn>:
2751-
<a for=list>For each</a> <a>deferred fetch record</a> <var>deferredRecord</var> in
2756+
<a for=list>For each</a> <a>deferred fetch record</a> <var>deferredRecord</var> of
27522757
<var>fetchGroup</var>'s <a for="fetch group">deferred fetch records</a> whose
2753-
<a for="deferred fetch record">inactivity deferred delay</a> is not null:
2758+
<a for="deferred fetch record">inactivity delay</a> is not null:
27542759

27552760
<ol>
27562761
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> to
@@ -2761,28 +2766,20 @@ not <a for=Document>fully active</a>. It has the following <a for=struct>items</
27612766

27622767
<ol>
27632768
<li><p>The user agent should wait until <var>deferredRecord</var>'s
2764-
<a for="deferred fetch record">inactivity deferred delay</a> have passed or until
2769+
<a for="deferred fetch record">inactivity delay</a> have passed or until
27652770
<var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> is not
27662771
"<code>scheduled</code>". The user agent may wait for a longer or shorter period time, e.g., to
27672772
optimize batching of deferred fetches.
27682773

2769-
<li><p>If the result of atomically exchanging the value of <var>deferredRecord</var>'s
2770-
<a for="deferred fetch record">invoke state</a> with "<code>sent</code>" is
2771-
"<code>scheduled</code>", then <a for=/>fetch</a> <var>record</var>'s
2772-
<a for="fetch record">request</a>.
2774+
<li><p>If <var>deferredRecord</var>'s is not "<code>scheduled</code>", abort these steps.
2775+
2776+
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> to
2777+
"<code>activated</code>".
2778+
2779+
<li><p><a for=/>Fetch</a> <var>record</var>'s <a for="fetch record">request</a>.
27732780
</ol>
2774-
</li>
27752781
</ol>
27762782

2777-
<p>When a <a for=fetch>fetch group</a> <var>fetchGroup</var> is
2778-
<dfn export for="fetch group" id=concept-fetch-group-reactivate>reactivated</dfn>:
2779-
<a for=list>For each</a> <a for=/>deferred fetch record</a> <var>deferredRecord</var> in
2780-
<var>fetchGroup</var>'s <a for="fetch group">deferred fetch records</a>: If the result of atomically
2781-
exchanging the value of <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a>
2782-
with "<code>deferred</code>" is "<code>sent</code>", then <a for=list>remove</a>
2783-
<var>deferredRecord</var> from <var>fetchGroup</var>'s
2784-
<a for="fetch group">deferred fetch records</a> and set <var>deferredRecord</var>'s
2785-
<a for="deferred fetch record">sent</a> to true.
27862783

27872784

27882785
<h3 id=resolving-domains>Resolving domains</h3>
@@ -6755,8 +6752,8 @@ is <a for="fetch group">deactivated</a>.
67556752
<li><p>Let <var>deferredRecord</var> be a new <a>deferred fetch record</a> whose
67566753
<a for="deferred fetch record">request</a> is <var>request</var>.
67576754

6758-
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">inactivity deferred delay</a>
6759-
to <var>inactivityDeferredDelay</var>.
6755+
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">inactivity delay</a> to
6756+
<var>inactivityDeferredDelay</var>.
67606757

67616758
<li><p><a for=list>Append</a> <var>deferredRecord</var> to <var>request</var>'s
67626759
<a for=request>client</a>'s <a for=fetch>fetch group</a>'s
@@ -8630,7 +8627,7 @@ dictionary DeferredRequestInit : RequestInit {
86308627
};
86318628

86328629
interface FetchLaterResult {
8633-
readonly attribute boolean sent;
8630+
readonly attribute boolean activated;
86348631
};
86358632

86368633
partial interface mixin WindowOrWorkerGlobalScope {
@@ -8642,8 +8639,9 @@ partial interface mixin WindowOrWorkerGlobalScope {
86428639
<dfn for=FetchLaterResult>deferred record</dfn>.
86438640

86448641
<div algorithm>
8645-
<p>The <dfn attribute for=FetchLaterResult><code>sent</code></dfn> getter steps are to return
8646-
<a>this</a>'s <a for=FetchLaterResult>deferred record</a>'s <a for="deferred fetch record">sent</a>.
8642+
<p>The <dfn attribute for=FetchLaterResult><code>activated</code></dfn> getter steps are to return
8643+
true if <a>this</a>'s <a for=FetchLaterResult>deferred record</a>'s
8644+
<a for="deferred fetch record">invoke state</a> is "<code>activated</code>"; Otherwise false.
86478645
</div>
86488646

86498647
<div algorithm="dom-fetch-later">

0 commit comments

Comments
 (0)