This is intriguing.  But what it comes down to is what we consider an &quot;API operation&quot;.  For example, you could define &quot;API operation&quot; to be the existing list of thing that unlock LocalStorage.  Or it could be defined in a way that Darin Fisher&#39;s idea to lock whenever we&#39;re about to nest locking calls would also work.  Or a variety of other things.<div>

<br></div><div>Does anyone have any ideas on what the exact language for what an &quot;API operation&quot; might look like?</div><div><br></div><div><br></div><div>I do have a couple of concerns though:</div><div>Leaving the language open might not be terribly useful to a typical web developer since they&#39;re not going to read the spec and probably aren&#39;t going to have a very firm idea of whether what they&#39;re doing could unlock storage or not.  Experimentation wouldn&#39;t work very well since each platform could be wildly different (since a lot of possible behaviors fall between the MAY and the MAY NOT in the proposed spec).</div>

<div><br></div><div>Another concern is that the worst case performance aspects of LocalStorage remain.  I cringe every time I think of one event loop blocking another.  But I will admit that the average time would be better--especially if we&#39;re unlocking fairly aggressively.</div>

<div><br></div><div>I&#39;m interested to hear what others have to say on this proposal.</div><div><br></div><div>J</div><div><br></div><div><br><div class="gmail_quote">On Wed, Nov 4, 2009 at 3:31 PM, Rob Ennals <span dir="ltr">&lt;<a href="mailto:rob.ennals@gmail.com">rob.ennals@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Missed out the important final qualifier. Here&#39;s take 3:<br>
<br>
&quot;the user agent MUST NOT release the storage mutex between calls to local storage, except that the user agent MAY release the storage mutex on any API operation /other that a local storage oeration/&quot;<br>
<br>
If a local storage op can release the mutex then the whole thing is pointless :-)<br><font color="#888888">
<br>
-Rob</font><div><div></div><div class="h5"><br>
<br>
On Nov 4, 2009, at 3:15 PM, Rob Ennals &lt;<a href="mailto:rob.ennals@gmail.com" target="_blank">rob.ennals@gmail.com</a>&gt; wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I suspect my suggested spec line was insufficiently precise. How about this:<br>
<br>
&quot;the user agent MUST NOT release the storage mutex between calls to local storage, except that the user agent MAY release the storage mutex on any API operation&quot;<br>
<br>
We&#39;d still need to define what &quot;API operation&quot; means, and I&#39;m sure this could be worded better, but hopefully this makes the basic idea clearer.<br>
<br>
-Rob<br>
<br>
On Nov 4, 2009, at 2:56 PM, Mike Shaver &lt;<a href="mailto:mike.shaver@gmail.com" target="_blank">mike.shaver@gmail.com</a>&gt; wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Wed, Nov 4, 2009 at 5:51 PM, Rob Ennals &lt;<a href="mailto:rob.ennals@gmail.com" target="_blank">rob.ennals@gmail.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Or to put it another way: if the thread can&#39;t call an API then it can&#39;t<br>
block waiting for another storage mutex, thus deadlock can&#39;t occur, thus we<br>
don&#39;t need to release the storage mutex.<br>
</blockquote>
<br>
Right, but the spec text there doesn&#39;t prevent the UA from releasing<br>
more than in that scenario, which seems like it&#39;s not an improvement<br>
over where we are right now: unpredictable consistency.  Existing racy<br>
implementations like in IE would be conformant, so developers can&#39;t<br>
count on the script-sequenced-storage-ops pattern providing<br>
transactionality.<br>
<br>
More likely, though, _I_&#39;m missing something...<br>
<br>
Mike<br>
</blockquote>
<br>
</blockquote>
</div></div></blockquote></div><br></div>