<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    I think Saulo indeed managed to reverse engineer the correct answer,
    and, to save future questioners from the same detective work, I've
    added a description in Section 8.6 of the manual.  (Its compiled PDF
    version will go up on the web with the next Ur/Web release.)<br>
    <br>
    Thanks, Benjamin, for pointing out this documentation hole.<br>
    <br>
    <div class="moz-cite-prefix">On 08/21/2016 07:13 PM, Saulo Araujo
      wrote:<br>
    </div>
    <blockquote
cite="mid:CA+ckhoR9FLKGMejHw=q-ZCvtzhji1hoyEs=0P+LyWKsqZ-DWag@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div>Hi Benjamin,</div>
          <div><br>
          </div>
          <div>I believe that, besides sleep, only the functions rpc and
            recv also trigger context switches. If you look into the
            source code of the Ur/Web JavaScript runtime (urweb.js), you
            will see that there is a boolean variable called maySuspend,
            which says when context switches are allowed and the only
            functions that check the value of maySuspend are sl (sleep),
            rc (rpc) and rc (recv).</div>
        </div>
        <div><br>
        </div>
        <div>Sincerely,</div>
        <div>Saulo Araujo</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Sat, Aug 20, 2016 at 5:25 PM,
          Benjamin Barenblat <span dir="ltr"><<a
              moz-do-not-send="true" href="mailto:bbaren@mit.edu"
              target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:bbaren@mit.edu">bbaren@mit.edu</a></a>></span> wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">The
            threads demo* explains that ‘Ur/Web [client code] uses
            cooperative<br>
            multi-threading, not the more common preemptive
            multi-threading. Only<br>
            one thread runs at a time, and only particular function
            calls can<br>
            trigger context switches. In this example, sleep is the only
            such<br>
            function that appears.’ What other functions can trigger
            context<br>
            switches?<br>
            <br>
            * <a moz-do-not-send="true"
              href="http://impredicative.com/ur/demo/threads.desc.html"
              rel="noreferrer" target="_blank">http://impredicative.com/ur/<wbr>demo/threads.desc.html</a><br>
          </blockquote>
        </div>
      </div>
    </blockquote>
  </body>
</html>