while (have_read_event || have_write_event) {
/* RECV LOOP - TRY TO CLEAR THE BUFFER */
- if (stream->read_action == NULL) {
+ if (stream->read_action == NULL || !ev_is_active(&stream->read_watcher)) {
have_read_event = FALSE;
- } else {
+ } else {
r = stream->read_action(stream);
if (r == AGAIN) {
}
/* SEND LOOP - TRY TO CLEAR THE BUFFER */
- if (stream->write_action == NULL) {
+ if (stream->write_action == NULL || !ev_is_active(&stream->write_watcher)) {
have_write_event = FALSE;
} else {
r = stream->write_action(stream);
--- /dev/null
+include("mjsunit.js");
+PORT = 20444;
+N = 30*1024; // 500kb
+
+puts("build big string");
+var body = "";
+for (var i = 0; i < N; i++) {
+ body += "C";
+}
+
+puts("start server on port " + PORT);
+
+server = node.tcp.createServer(function (connection) {
+ connection.addListener("connect", function () {
+ connection.send(body);
+ connection.fullClose();
+ });
+});
+server.listen(PORT);
+
+
+chars_recved = 0;
+npauses = 0;
+
+
+function onLoad () {
+ var paused = false;
+ client = node.tcp.createConnection(PORT);
+ client.setEncoding("ascii");
+ client.addListener("receive", function (d) {
+ chars_recved += d.length;
+ puts("got " + chars_recved);
+ if (!paused) {
+ client.readPause();
+ npauses += 1;
+ paused = true;
+ puts("pause");
+ x = chars_recved;
+ setTimeout(function () {
+ assertEquals(chars_recved, x);
+ client.readResume();
+ puts("resume");
+ paused = false;
+ }, 100);
+ }
+ });
+
+ client.addListener("eof", function () {
+ server.close();
+ client.close();
+ });
+}
+
+function onExit () {
+ assertEquals(N, chars_recved);
+ assertTrue(npauses > 2);
+}
setTimeout(function () {
chars_recved = recv.length;
- puts("chars_recved: " + chars_recved);
+ puts("pause at: " + chars_recved);
assertTrue(chars_recved > 1);
client.readPause();
setTimeout(function () {
- puts("chars_recved: " + chars_recved);
+ puts("resume at: " + chars_recved);
assertEquals(chars_recved, recv.length);
client.readResume();
+
+ setTimeout(function () {
+ chars_recved = recv.length;
+ puts("pause at: " + chars_recved);
+ client.readPause();
+
+ setTimeout(function () {
+ puts("resume at: " + chars_recved);
+ assertEquals(chars_recved, recv.length);
+ client.readResume();
+
+ }, 500);
+
+ }, 500);
+
}, 500);
- }, 100);
+
+ }, 500);
client.addListener("eof", function () {
server.close();