view index-rlg.html @ 165:59e62710cbb5

rlgwebd.js: prevent races when reading ttyrecs. DglSession objects read a 12-byte TTYREC header, extract therefrom the length of the data chunk, and then read the data. In between these two reads, the file watcher could trigger another readchunk() invocation, which might attempt to read a header from the beginning of the data chunk. This usually results in expecting a data chunk of several GB and failing to create a Buffer for it. The race is remedied by setting a flag on the DglSession object whenever readchunk() is called, clearing it when both reads complete, and refusing to read if it is already set.
author John "Elwin" Edwards
date Wed, 07 Jan 2015 13:18:35 -0500
parents bc69717ff386
children db27b91578f0
line wrap: on
line source

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>RLG-Web β6</title>
<script type="text/javascript" src="termemu.js"></script>
<script type="text/javascript" src="termemu-keys.js"></script>
<script type="text/javascript" src="rlgterm.js"></script>
<link rel="stylesheet" type="text/css" href="tty.css">
<link rel="stylesheet" type="text/css" href="style-rlg.css">
</head>
<body onload="setup()" onkeydown="sendkey(event)">
<h1>RLG-Web β6</h1>
<div id ="top">
  <img src="/bell.svg" alt="bell" id="bell">
</div>
<div id="termwrap">RLG-Web won't work without JavaScript. It's not as bad as Flash, I promise.</div>
<div class="modal" id="keyboard">
<div id="keys">
<div class="keyrow">
  <div class="key" onclick="vkey('`')">`</div>
  <div class="key" onclick="vkey('1')">1</div>
  <div class="key" onclick="vkey('2')">2</div>
  <div class="key" onclick="vkey('3')">3</div>
  <div class="key" onclick="vkey('4')">4</div>
  <div class="key" onclick="vkey('5')">5</div>
  <div class="key" onclick="vkey('6')">6</div>
  <div class="key" onclick="vkey('7')">7</div>
  <div class="key" onclick="vkey('8')">8</div>
  <div class="key" onclick="vkey('9')">9</div>
  <div class="key" onclick="vkey('0')">0</div>
  <div class="key" onclick="vkey('-')">-</div>
  <div class="key" onclick="vkey('=')">=</div>
  <div class="key" onclick="vkey('\b')" style="width: 2.5em">Bksp</div>
  <div class="rkey" onclick="vkey('KP9')">↗</div>
  <div class="rkey" onclick="vkey('KP8')">↑</div>
  <div class="rkey" onclick="vkey('KP7')">↖</div>
</div>
<div class="keyrow">
  <div class="key" onclick="vkey('\t')" style="width: 2.5em">Tab</div>
  <div class="key" onclick="vkey('q')">Q</div>
  <div class="key" onclick="vkey('w')">W</div>
  <div class="key" onclick="vkey('e')">E</div>
  <div class="key" onclick="vkey('r')">R</div>
  <div class="key" onclick="vkey('t')">T</div>
  <div class="key" onclick="vkey('y')">Y</div>
  <div class="key" onclick="vkey('u')">U</div>
  <div class="key" onclick="vkey('i')">I</div>
  <div class="key" onclick="vkey('o')">O</div>
  <div class="key" onclick="vkey('p')">P</div>
  <div class="key" onclick="vkey('[')">[</div>
  <div class="key" onclick="vkey(']')">]</div>
  <div class="key" onclick="vkey('\\')">\</div>
  <div class="rkey" onclick="vkey('KP6')">→</div>
  <div class="rkey" onclick="vkey('KP5')">·</div>
  <div class="rkey" onclick="vkey('KP4')">←</div>
</div>
<div class="keyrow">
  <div class="key" onclick="togglectrl()" id="ctrlkey">Ctrl</div>
  <div class="key" onclick="vkey('a')">A</div>
  <div class="key" onclick="vkey('s')">S</div>
  <div class="key" onclick="vkey('d')">D</div>
  <div class="key" onclick="vkey('f')">F</div>
  <div class="key" onclick="vkey('g')">G</div>
  <div class="key" onclick="vkey('h')">H</div>
  <div class="key" onclick="vkey('j')">J</div>
  <div class="key" onclick="vkey('k')">K</div>
  <div class="key" onclick="vkey('l')">L</div>
  <div class="key" onclick="vkey(';')">;</div>
  <div class="key" onclick="vkey('\'')">'</div>
  <div class="key" onclick="vkey('\n')" style="width: 4em">Ret</div>
  <div class="rkey" onclick="vkey('KP3')">↘</div>
  <div class="rkey" onclick="vkey('KP2')">↓</div>
  <div class="rkey" onclick="vkey('KP1')">↙</div>
</div>
<div class="keyrow">
  <div class="key" onclick="toggleshift()" id="shiftkey">Shift</div>
  <div class="key" onclick="vkey('z')">Z</div>
  <div class="key" onclick="vkey('x')">X</div>
  <div class="key" onclick="vkey('c')">C</div>
  <div class="key" onclick="vkey('v')">V</div>
  <div class="key" onclick="vkey('b')">B</div>
  <div class="key" onclick="vkey('n')">N</div>
  <div class="key" onclick="vkey('m')">M</div>
  <div class="key" onclick="vkey(',')">,</div>
  <div class="key" onclick="vkey('.')">.</div>
  <div class="key" onclick="vkey('/')">/</div>
</div>
<div class="keyrow">
  <div class="key" onclick="vkey(' ')" id="spacebar"></div>
</div>
</div>
<div class="centerb"><span class="ibutton" onclick="toggleBlock('keys')">Keyboard</span></div>
</div>
<div class="modal" id="playctl">
<div class="rfloat"><span class="ibutton" onclick="stop()">Stop</span></div>
<div class="rfloat">Font:
<span onclick="textsize(false)" class="ibutton">Smaller</span>
<span onclick="textsize(true)" class="ibutton">Larger</span>
</div>
</div>
<div class="modal" id="current">
<div id="gametable" class="formtable">
 <div class="tcapt">Games in Progress</div>
 <div><div>Player</div><div>Game</div><div>Idle time</div><div>Actions</div></div>
</div>
<div id="nogames">No one is playing right now.</div>
</div>
<div class="modal" id="startgame">
<div id="opttable" class="formtable"><div><div>Game</div><div>Actions</div></div></div>
</div>
<div class="modal" id="login">
<div class="formtable">
<div><div>Name:</div><div><input type="text" name="name" id="input_name"></div></div>
<div><div>Password:</div><div><input type="password" name="pw" id="input_pw"></div></div>
<div><div><span class="ibutton" onclick="formlogin(event)">Log in</span></div></div>
</div>
<div class="rfloat"><span class="ibutton" onclick="setmode('register')">New name</span></div>
</div>
<div class="modal" id="register">
<div class="formtable">
<div><div>Name:</div><div><input type="text" name="name" id="regin_name" maxlength="20"></div></div>
<div><div>Password:</div><div><input type="password" name="pw" id="regin_pw"></div></div>
<div><div>E-mail (optional):</div><div><input type="text" name="email" id="regin_email"></div></div>
<div>
<div><span class="ibutton" onclick="formreg(event)">Sign up</span></div>
<div><span class="ibutton" onclick="setmode('login')">Cancel</span></div>
</div>
</div>
</div>
<div class="modal" id="messages">
</div>
<div class="modal" id="misc">
<div class="centerb"><a href="/options.html">Options</a></div>
<div class="centerb"><a href="/about.html">Information</a></div>
</div>
<div id="debug">
</div>
</body>
</html>