Pier Angelo Vendrame pushed to branch tor-browser-102.9.0esr-12.5-1 at The Tor Project / Applications / Tor Browser
Commits: 50201d24 by Pier Angelo Vendrame at 2023-03-31T17:43:49+02:00 fixup! Bug 10760: Integrate TorButton to TorBrowser core
Bug 40501: High CPU load after tor exits unexpectedly
When a peers (tor) disconnects, Firefox seems to keep the stream open, and return 0 on available, rather than throwing. So, as a matter of fact, we had a while trying to read 0 bytes without any pause in _readLine, hence the 100% CPU usage.
- - - - -
1 changed file:
- toolkit/torbutton/modules/tor-control-port.js
Changes:
===================================== toolkit/torbutton/modules/tor-control-port.js ===================================== @@ -135,6 +135,18 @@ class AsyncSocket { this.inputQueue.push({ onInputStreamReady: stream => { try { + if (!this.scriptableInputStream.available()) { + // This means EOF, but not closed yet. However, arriving at EOF + // should be an error condition for us, since we are in a socket, + // and EOF should mean peer disconnected. + // If the stream has been closed, this function itself should + // throw. + reject( + new Error("onInputStreamReady called without available bytes.") + ); + return; + } + // read our string from input stream let str = this.scriptableInputStream.read( this.scriptableInputStream.available()
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/50201d24...
tor-commits@lists.torproject.org