Skip to content

Instantly share code, notes, and snippets.

@onionhammer
Last active December 27, 2015 09:39
Show Gist options
  • Save onionhammer/7306011 to your computer and use it in GitHub Desktop.
Save onionhammer/7306011 to your computer and use it in GitHub Desktop.
Memory leak (boiled down)
<script>
var ws;
function connect() {
ws = new WebSocket("ws://localhost:8080");
setTimeout(function() {
ws.close();
connect();
}, 20);
}
connect();
</script>
import sockets, asyncio
type TWebSocketServer = object
asyncServer: PAsyncSocket
dispatcher: PDispatcher
var ws: TWebSocketServer
proc onClientRead(s: PAsyncSocket) =
var line = ""
discard s.readLine(line)
s.send("error")
s.close()
proc handleAccept(server: PAsyncSocket) =
# accept incoming connection
var socket: PAsyncSocket
new(socket)
socket.handleRead = onClientRead
accept(server, socket)
proc open*(address = "127.0.0.1", port = TPort(8080)) =
# open a socket server
ws.asyncServer = asyncSocket()
bindAddr(ws.asyncServer, port, address)
listen(ws.asyncServer)
ws.asyncServer.handleAccept = handleAccept
proc register*(dispatcher: PDispatcher, ws: var TWebSocketServer) =
dispatcher.register(ws.asyncServer)
ws.dispatcher = dispatcher
block main:
open()
let dispatch = newDispatcher()
dispatch.register(ws)
while dispatch.poll():
echo "memory: ", getOccupiedMem()
# Now open leak.html in a browser
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment