Fix global leaks
This commit is contained in:
parent
a0159b4b29
commit
92789b16e5
@ -853,7 +853,7 @@ Server.prototype._rejectPending = function() {
|
||||
// Accept and close the waiting clients one at a time.
|
||||
// Single threaded programming ftw.
|
||||
while (true) {
|
||||
peerInfo = accept(this.fd);
|
||||
var peerInfo = accept(this.fd);
|
||||
if (!peerInfo) return;
|
||||
close(peerInfo.fd);
|
||||
|
||||
|
3
test/fixtures/print-chars-from-buffer.js
vendored
3
test/fixtures/print-chars-from-buffer.js
vendored
@ -1,10 +1,9 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
var n = parseInt(process.argv[2]);
|
||||
|
||||
b = new Buffer(n);
|
||||
var b = new Buffer(n);
|
||||
for (var i = 0; i < n; i++) {
|
||||
b[i] = 100;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
common = require('../common');
|
||||
assert = common.assert;
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var util = require('util');
|
||||
|
||||
util = require('util');
|
||||
console.log([
|
||||
'_______________________________________________50',
|
||||
'______________________________________________100',
|
||||
|
@ -1,4 +1,4 @@
|
||||
common = require('../common');
|
||||
assert = common.assert;
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
|
||||
console.log('hello world');
|
||||
|
@ -1,11 +1,11 @@
|
||||
// This test requires the program 'ab'
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
http = require('http');
|
||||
exec = require('child_process').exec;
|
||||
var http = require('http');
|
||||
var exec = require('child_process').exec;
|
||||
|
||||
body = 'hello world\n';
|
||||
server = http.createServer(function(req, res) {
|
||||
var body = 'hello world\n';
|
||||
var server = http.createServer(function(req, res) {
|
||||
res.writeHead(200, {
|
||||
'Content-Length': body.length,
|
||||
'Content-Type': 'text/plain'
|
||||
|
@ -1,6 +1,7 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
net = require('net');
|
||||
var net = require('net');
|
||||
|
||||
// settings
|
||||
var bytes = 1024 * 40;
|
||||
var concurrency = 100;
|
||||
|
@ -1,10 +1,11 @@
|
||||
var common = require('../common');
|
||||
var assert = common.assert;
|
||||
var net = require('net');
|
||||
|
||||
var N = 200;
|
||||
var recv = '', chars_recved = 0;
|
||||
|
||||
server = net.createServer(function(connection) {
|
||||
var server = net.createServer(function(connection) {
|
||||
function write(j) {
|
||||
if (j >= N) {
|
||||
connection.end();
|
||||
@ -17,8 +18,9 @@ server = net.createServer(function(connection) {
|
||||
}
|
||||
write(0);
|
||||
});
|
||||
|
||||
server.on('listening', function() {
|
||||
client = net.createConnection(common.PORT);
|
||||
var client = net.createConnection(common.PORT);
|
||||
client.setEncoding('ascii');
|
||||
client.addListener('data', function(d) {
|
||||
common.print(d);
|
||||
|
@ -1,6 +1,6 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
net = require('net');
|
||||
var net = require('net');
|
||||
|
||||
|
||||
var tests_run = 0;
|
||||
|
@ -1,6 +1,6 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
net = require('net');
|
||||
var net = require('net');
|
||||
|
||||
var tests_run = 0;
|
||||
|
||||
|
@ -1,11 +1,10 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
net = require('net');
|
||||
N = 160 * 1024; // 30kb
|
||||
var net = require('net');
|
||||
|
||||
|
||||
chars_recved = 0;
|
||||
npauses = 0;
|
||||
var N = 160 * 1024; // 30kb
|
||||
var chars_recved = 0;
|
||||
var npauses = 0;
|
||||
|
||||
console.log('build big string');
|
||||
var body = '';
|
||||
@ -15,15 +14,16 @@ for (var i = 0; i < N; i++) {
|
||||
|
||||
console.log('start server on port ' + common.PORT);
|
||||
|
||||
server = net.createServer(function(connection) {
|
||||
var server = net.createServer(function(connection) {
|
||||
connection.addListener('connect', function() {
|
||||
assert.equal(false, connection.write(body));
|
||||
connection.end();
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function() {
|
||||
var paused = false;
|
||||
client = net.createConnection(common.PORT);
|
||||
var client = net.createConnection(common.PORT);
|
||||
client.setEncoding('ascii');
|
||||
client.addListener('data', function(d) {
|
||||
chars_recved += d.length;
|
||||
@ -33,7 +33,7 @@ server.listen(common.PORT, function() {
|
||||
npauses += 1;
|
||||
paused = true;
|
||||
console.log('pause');
|
||||
x = chars_recved;
|
||||
var x = chars_recved;
|
||||
setTimeout(function() {
|
||||
assert.equal(chars_recved, x);
|
||||
client.resume();
|
||||
|
@ -1,10 +1,11 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
net = require('net');
|
||||
exchanges = 0;
|
||||
starttime = null;
|
||||
timeouttime = null;
|
||||
timeout = 1000;
|
||||
var net = require('net');
|
||||
|
||||
var exchanges = 0;
|
||||
var starttime = null;
|
||||
var timeouttime = null;
|
||||
var timeout = 1000;
|
||||
|
||||
var echo_server = net.createServer(function(socket) {
|
||||
socket.setTimeout(timeout);
|
||||
|
@ -1,8 +1,6 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
|
||||
assert = require('assert');
|
||||
|
||||
var WINDOW = 200; // why is does this need to be so big?
|
||||
|
||||
var interval_count = 0;
|
||||
@ -79,8 +77,8 @@ setInterval(function(param1, param2){
|
||||
}, 1000, 'param1', 'param2');
|
||||
|
||||
// setInterval(cb, 0) should be called multiple times.
|
||||
count4 = 0;
|
||||
interval4 = setInterval(function() {
|
||||
var count4 = 0;
|
||||
var interval4 = setInterval(function() {
|
||||
if (++count4 > 10) clearInterval(interval4);
|
||||
}, 0);
|
||||
|
||||
@ -92,12 +90,12 @@ function t () {
|
||||
expectedTimeouts--;
|
||||
}
|
||||
|
||||
w = setTimeout(t, 200),
|
||||
x = setTimeout(t, 200),
|
||||
y = setTimeout(t, 200);
|
||||
var w = setTimeout(t, 200);
|
||||
var x = setTimeout(t, 200);
|
||||
var y = setTimeout(t, 200);
|
||||
|
||||
clearTimeout(y),
|
||||
z = setTimeout(t, 200);
|
||||
clearTimeout(y);
|
||||
var z = setTimeout(t, 200);
|
||||
clearTimeout(y);
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@ var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
var http = require('http');
|
||||
|
||||
server = http.createServer(function (req, res) {
|
||||
var server = http.createServer(function (req, res) {
|
||||
intentionally_not_defined();
|
||||
res.writeHead(200, {"Content-Type": "text/plain"});
|
||||
res.write("Thank you, come again.");
|
||||
@ -17,7 +17,7 @@ server.listen(common.PORT, function () {
|
||||
}
|
||||
});
|
||||
|
||||
exception_count = 0;
|
||||
var exception_count = 0;
|
||||
|
||||
process.addListener("uncaughtException", function (err) {
|
||||
console.log("Caught an exception: " + err);
|
||||
|
@ -1,5 +1,5 @@
|
||||
var common = require("../common");
|
||||
var assert = common.assert;
|
||||
var assert = require('assert');
|
||||
var http = require("http");
|
||||
|
||||
var outstanding_reqs = 0;
|
||||
@ -31,12 +31,12 @@ server.listen(common.PORT);
|
||||
|
||||
server.addListener("listening", function() {
|
||||
var client = http.createClient(common.PORT);
|
||||
req = client.request("POST", "/world", {
|
||||
var req = client.request("POST", "/world", {
|
||||
"Expect": "100-continue",
|
||||
});
|
||||
common.debug("Client sending request...");
|
||||
outstanding_reqs++;
|
||||
body = "";
|
||||
var body = "";
|
||||
req.addListener('continue', function () {
|
||||
common.debug("Client got 100 Continue...");
|
||||
got_continue = true;
|
||||
|
@ -1,20 +1,18 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
|
||||
assert = require("assert");
|
||||
var http = require('http');
|
||||
var util = require('util');
|
||||
|
||||
body = "hello world\n";
|
||||
headers = {'connection':'keep-alive'}
|
||||
var body = "hello world\n";
|
||||
var headers = {'connection':'keep-alive'}
|
||||
|
||||
server = http.createServer(function (req, res) {
|
||||
var server = http.createServer(function (req, res) {
|
||||
res.writeHead(200, {"Content-Length": body.length, "Connection":"close"});
|
||||
res.write(body);
|
||||
res.end();
|
||||
});
|
||||
|
||||
connectCount = 0;
|
||||
var connectCount = 0;
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
var client = http.createClient(common.PORT);
|
||||
|
@ -1,20 +1,18 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
|
||||
assert = require("assert");
|
||||
var http = require('http');
|
||||
var util = require('util');
|
||||
|
||||
body = "hello world\n";
|
||||
headers = {'connection':'keep-alive'}
|
||||
var body = "hello world\n";
|
||||
var headers = {'connection':'keep-alive'}
|
||||
|
||||
server = http.createServer(function (req, res) {
|
||||
var server = http.createServer(function (req, res) {
|
||||
res.writeHead(200, {"Content-Length": body.length});
|
||||
res.write(body);
|
||||
res.end();
|
||||
});
|
||||
|
||||
connectCount = 0;
|
||||
var connectCount = 0;
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
var client = http.createClient(common.PORT);
|
||||
|
@ -2,8 +2,8 @@ var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var net = require('net');
|
||||
var http = require('http');
|
||||
url = require("url");
|
||||
qs = require("querystring");
|
||||
var url = require("url");
|
||||
var qs = require("querystring");
|
||||
|
||||
var request_number = 0;
|
||||
var requests_sent = 0;
|
||||
|
@ -1,10 +1,9 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
|
||||
var http = require('http');
|
||||
var net = require('net');
|
||||
|
||||
server = http.createServer(function (req, res) {
|
||||
var server = http.createServer(function (req, res) {
|
||||
common.error('got req');
|
||||
throw new Error("This shouldn't happen.");
|
||||
});
|
||||
@ -16,7 +15,7 @@ server.addListener('upgrade', function (req, socket, upgradeHead) {
|
||||
throw new Error('upgrade error');
|
||||
});
|
||||
|
||||
gotError = false;
|
||||
var gotError = false;
|
||||
|
||||
process.addListener('uncaughtException', function (e) {
|
||||
common.error('got "clientError" event');
|
||||
|
@ -2,9 +2,8 @@ var common = require('../common');
|
||||
var assert = require('assert');
|
||||
|
||||
var http = require('http');
|
||||
assert = require('assert');
|
||||
|
||||
server = http.createServer(function (request, response) {
|
||||
var server = http.createServer(function (request, response) {
|
||||
console.log('responding to ' + request.url);
|
||||
|
||||
response.writeHead(200, {'Content-Type': 'text/plain'});
|
||||
|
@ -1,7 +1,7 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var http = require('http');
|
||||
url = require("url");
|
||||
var url = require("url");
|
||||
|
||||
function p (x) {
|
||||
common.error(common.inspect(x));
|
||||
|
@ -4,7 +4,7 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var http = require('http');
|
||||
netBinding = process.binding('net');
|
||||
var netBinding = process.binding('net');
|
||||
|
||||
// Create an server and set it listening on a socket bound to common.PORT
|
||||
var gotRequest = false;
|
||||
|
@ -2,10 +2,10 @@ var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var net = require('net');
|
||||
|
||||
binaryString = "";
|
||||
var binaryString = "";
|
||||
for (var i = 255; i >= 0; i--) {
|
||||
var s = "'\\" + i.toString(8) + "'";
|
||||
S = eval(s);
|
||||
var S = eval(s);
|
||||
common.error( s
|
||||
+ " "
|
||||
+ JSON.stringify(S)
|
||||
|
@ -8,12 +8,12 @@ var net = require('net');
|
||||
// TODO: test that the server can accept more connections after it reaches
|
||||
// its maximum and some are closed.
|
||||
|
||||
N = 200;
|
||||
count = 0;
|
||||
closes = 0;
|
||||
waits = [];
|
||||
var N = 200;
|
||||
var count = 0;
|
||||
var closes = 0;
|
||||
var waits = [];
|
||||
|
||||
server = net.createServer(function (connection) {
|
||||
var server = net.createServer(function (connection) {
|
||||
console.error("connect %d", count++);
|
||||
connection.write("hello");
|
||||
waits.push(function () { connection.end(); });
|
||||
|
@ -1,19 +1,18 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var exec = require('child_process').exec;
|
||||
var join = require('path').join;
|
||||
|
||||
exec = require('child_process').exec;
|
||||
join = require('path').join;
|
||||
var nodePath = process.argv[0];
|
||||
var script = join(common.fixturesDir, 'print-10-lines.js');
|
||||
|
||||
nodePath = process.argv[0];
|
||||
script = join(common.fixturesDir, 'print-10-lines.js');
|
||||
var cmd = nodePath + ' ' + script + ' | head -2';
|
||||
|
||||
cmd = nodePath + ' ' + script + ' | head -2';
|
||||
|
||||
finished = false;
|
||||
var finished = false;
|
||||
|
||||
exec(cmd, function (err, stdout, stderr) {
|
||||
if (err) throw err;
|
||||
lines = stdout.split('\n');
|
||||
var lines = stdout.split('\n');
|
||||
assert.equal(3, lines.length);
|
||||
finished = true;
|
||||
});
|
||||
|
@ -4,12 +4,12 @@ var net = require('net');
|
||||
var fs = require('fs');
|
||||
var util = require('util');
|
||||
var path = require('path');
|
||||
fn = path.join(common.fixturesDir, 'does_not_exist.txt');
|
||||
var fn = path.join(common.fixturesDir, 'does_not_exist.txt');
|
||||
|
||||
var got_error = false;
|
||||
var conn_closed = false;
|
||||
|
||||
server = net.createServer(function (stream) {
|
||||
var server = net.createServer(function (stream) {
|
||||
common.error('pump!');
|
||||
util.pump(fs.createReadStream(fn), stream, function (err) {
|
||||
common.error("util.pump's callback fired");
|
||||
@ -25,7 +25,7 @@ server = net.createServer(function (stream) {
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
conn = net.createConnection(common.PORT);
|
||||
var conn = net.createConnection(common.PORT);
|
||||
conn.setEncoding('utf8');
|
||||
conn.addListener("data", function (chunk) {
|
||||
common.error('recv data! nchars = ' + chunk.length);
|
||||
@ -43,7 +43,6 @@ server.listen(common.PORT, function () {
|
||||
});
|
||||
|
||||
var buffer = '';
|
||||
count = 0;
|
||||
|
||||
process.addListener('exit', function () {
|
||||
assert.equal(true, got_error);
|
||||
|
@ -4,11 +4,11 @@ var net = require('net');
|
||||
var fs = require('fs');
|
||||
var util = require('util');
|
||||
var path = require('path');
|
||||
fn = path.join(common.fixturesDir, 'elipses.txt');
|
||||
var fn = path.join(common.fixturesDir, 'elipses.txt');
|
||||
|
||||
expected = fs.readFileSync(fn, 'utf8');
|
||||
var expected = fs.readFileSync(fn, 'utf8');
|
||||
|
||||
server = net.createServer(function (stream) {
|
||||
var server = net.createServer(function (stream) {
|
||||
common.error('pump!');
|
||||
util.pump(fs.createReadStream(fn), stream, function () {
|
||||
common.error('server stream close');
|
||||
@ -18,7 +18,7 @@ server = net.createServer(function (stream) {
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
conn = net.createConnection(common.PORT);
|
||||
var conn = net.createConnection(common.PORT);
|
||||
conn.setEncoding('utf8');
|
||||
conn.addListener("data", function (chunk) {
|
||||
common.error('recv data! nchars = ' + chunk.length);
|
||||
@ -34,7 +34,7 @@ server.listen(common.PORT, function () {
|
||||
});
|
||||
|
||||
var buffer = '';
|
||||
count = 0;
|
||||
var count = 0;
|
||||
|
||||
server.addListener('listening', function () {
|
||||
});
|
||||
|
@ -19,7 +19,7 @@ process.addListener('SIGUSR1', function () {
|
||||
}, 5);
|
||||
});
|
||||
|
||||
i = 0;
|
||||
var i = 0;
|
||||
setInterval(function () {
|
||||
console.log("running process..." + ++i);
|
||||
|
||||
|
@ -1,17 +1,16 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
|
||||
join = require('path').join;
|
||||
childProccess = require('child_process');
|
||||
var join = require('path').join;
|
||||
var childProccess = require('child_process');
|
||||
var fs = require('fs');
|
||||
|
||||
stdoutScript = join(common.fixturesDir, 'echo.js');
|
||||
tmpFile = join(common.fixturesDir, 'stdin.txt');
|
||||
var stdoutScript = join(common.fixturesDir, 'echo.js');
|
||||
var tmpFile = join(common.fixturesDir, 'stdin.txt');
|
||||
|
||||
cmd = process.argv[0] + ' ' + stdoutScript + ' < ' + tmpFile;
|
||||
var cmd = process.argv[0] + ' ' + stdoutScript + ' < ' + tmpFile;
|
||||
|
||||
string = "abc\nümlaut.\nsomething else\n"
|
||||
+ "南越国是前203年至前111年存在于岭南地区的一个国家,国都位于番禺,疆域包括今天中国的广东、广西两省区的大部份地区,福建省、湖南、贵州、云南的一小部份地区和越南的北部。南越国是秦朝灭亡后,由南海郡尉赵佗于前203年起兵兼并桂林郡和象郡后建立。前196年和前179年,南越国曾先后两次名义上臣属于西汉,成为西汉的“外臣”。前112年,南越国末代君主赵建德与西汉发生战争,被汉武帝于前111年所灭。南越国共存在93年,历经五代君主。南越国是岭南地区的第一个有记载的政权国家,采用封建制和郡县制并存的制度,它的建立保证了秦末乱世岭南地区社会秩序的稳定,有效的改善了岭南地区落后的政治、##济现状。\n";
|
||||
var string = "abc\nümlaut.\nsomething else\n" +
|
||||
"南越国是前203年至前111年存在于岭南地区的一个国家,国都位于番禺,疆域包括今天中国的广东、广西两省区的大部份地区,福建省、湖南、贵州、云南的一小部份地区和越南的北部。南越国是秦朝灭亡后,由南海郡尉赵佗于前203年起兵兼并桂林郡和象郡后建立。前196年和前179年,南越国曾先后两次名义上臣属于西汉,成为西汉的“外臣”。前112年,南越国末代君主赵建德与西汉发生战争,被汉武帝于前111年所灭。南越国共存在93年,历经五代君主。南越国是岭南地区的第一个有记载的政权国家,采用封建制和郡县制并存的制度,它的建立保证了秦末乱世岭南地区社会秩序的稳定,有效的改善了岭南地区落后的政治、##济现状。\n";
|
||||
|
||||
|
||||
console.log(cmd + "\n\n");
|
||||
|
@ -1,11 +1,12 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var path = require('path');
|
||||
childProccess = require('child_process');
|
||||
var childProccess = require('child_process');
|
||||
var fs = require('fs');
|
||||
scriptString = path.join(common.fixturesDir, 'print-chars.js');
|
||||
scriptBuffer = path.join(common.fixturesDir, 'print-chars-from-buffer.js');
|
||||
tmpFile = path.join(common.fixturesDir, 'stdout.txt');
|
||||
|
||||
var scriptString = path.join(common.fixturesDir, 'print-chars.js');
|
||||
var scriptBuffer = path.join(common.fixturesDir, 'print-chars-from-buffer.js');
|
||||
var tmpFile = path.join(common.fixturesDir, 'stdout.txt');
|
||||
|
||||
function test (size, useBuffer, cb) {
|
||||
var cmd = process.argv[0]
|
||||
@ -39,7 +40,7 @@ function test (size, useBuffer, cb) {
|
||||
});
|
||||
}
|
||||
|
||||
finished = false;
|
||||
var finished = false;
|
||||
test(1024*1024, false, function () {
|
||||
console.log("Done printing with string");
|
||||
test(1024*1024, true, function () {
|
||||
|
@ -1,13 +1,11 @@
|
||||
var common = require('../common');
|
||||
var assert = require('assert');;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
StringDecoder = require('string_decoder').StringDecoder;
|
||||
decoder = new StringDecoder('utf8');
|
||||
var assert = require('assert');
|
||||
var StringDecoder = require('string_decoder').StringDecoder;
|
||||
var decoder = new StringDecoder('utf8');
|
||||
|
||||
|
||||
|
||||
buffer = new Buffer('$');
|
||||
var buffer = new Buffer('$');
|
||||
assert.deepEqual('$', decoder.write(buffer));
|
||||
|
||||
buffer = new Buffer('¢');
|
||||
@ -20,7 +18,7 @@ assert.deepEqual('', decoder.write(buffer.slice(1, 2)));
|
||||
assert.deepEqual('€', decoder.write(buffer.slice(2, 3)));
|
||||
|
||||
buffer = new Buffer([0xF0, 0xA4, 0xAD, 0xA2]);
|
||||
s = '';
|
||||
var s = '';
|
||||
s += decoder.write(buffer.slice(0, 1));
|
||||
s += decoder.write(buffer.slice(1, 2));
|
||||
s += decoder.write(buffer.slice(2, 3));
|
||||
@ -34,10 +32,10 @@ assert.ok(s.length > 0);
|
||||
// U+12E4 -> E1 8B A4
|
||||
// U+0030 -> 30
|
||||
// U+3045 -> E3 81 85
|
||||
expected = '\u02e4\u0064\u12e4\u0030\u3045';
|
||||
buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4,
|
||||
0x30, 0xE3, 0x81, 0x85]);
|
||||
charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5];
|
||||
var expected = '\u02e4\u0064\u12e4\u0030\u3045';
|
||||
var buffer = new Buffer([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4,
|
||||
0x30, 0xE3, 0x81, 0x85]);
|
||||
var charLengths = [0, 0, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5];
|
||||
|
||||
// Split the buffer into 3 segments
|
||||
// |----|------|-------|
|
||||
|
Loading…
x
Reference in New Issue
Block a user