Fix stdout flush issue

http://github.com/ry/node/issues#issue/53
This commit is contained in:
Ryan Dahl 2010-02-07 21:56:36 -08:00
parent a695065305
commit ae1fc497bb
5 changed files with 34 additions and 36 deletions

View File

@ -1160,6 +1160,8 @@ int main(int argc, char *argv[]) {
// so your next reading stop should be node::Load()!
node::Load(argc, argv);
node::Stdio::Flush();
#ifndef NDEBUG
// Clean up.
context.Dispose();

View File

@ -197,6 +197,19 @@ Close (const Arguments& args)
return Undefined();
}
void Stdio::Flush() {
if (stdout_fd >= 0) {
close(stdout_fd);
stdout_fd = -1;
}
if (stdout_coupling) {
coupling_join(stdout_coupling);
coupling_destroy(stdout_coupling);
stdout_coupling = NULL;
}
}
void
Stdio::Initialize (v8::Handle<v8::Object> target)
{

View File

@ -11,6 +11,7 @@ namespace node {
class Stdio {
public:
static void Initialize (v8::Handle<v8::Object> target);
static void Flush ();
};
} // namespace node

View File

@ -8,5 +8,3 @@ for (var i = 0; i < n-1; i++) {
}
puts(s); // \n is the nth char.
process.exit(0);

View File

@ -2,43 +2,27 @@ process.mixin(require("./common"));
var sub = path.join(fixturesDir, 'print-chars.js');
completedTests = 0;
n = 100000;
function test (n, cb) {
var child = process.createChildProcess(process.argv[0], [sub, n]);
var child = process.createChildProcess(process.argv[0], [sub, n]);
var count = 0;
var count = 0;
child.addListener("error", function (data){
if (data) {
puts("parent stderr: " + data);
assert.ok(false);
}
});
child.addListener("output", function (data){
if (data) {
count += data.length;
}
});
child.addListener("exit", function (data) {
assert.equal(n, count);
puts(n + " okay");
completedTests++;
if (cb) cb();
});
}
test(5000, function () {
test(50000, function () {
test(500000);
});
child.addListener("error", function (data){
if (data) {
puts("parent stderr: " + data);
assert.ok(false);
}
});
process.addListener('exit', function () {
assert.equal(3, completedTests);
child.addListener("output", function (data){
if (data) {
count += data.length;
puts(count);
}
});
child.addListener("exit", function (data) {
assert.equal(n, count);
puts("okay");
});