The copyright and license notice is already in the LICENSE file. There is no justifiable reason to also require that it be included in every file, since the individual files are not individually distributed except as part of the entire package.
86 lines
2 KiB
JavaScript
86 lines
2 KiB
JavaScript
var common = require('../common');
|
|
var assert = require('assert');
|
|
var os = require('os');
|
|
var util = require('util');
|
|
|
|
if (os.type() != 'SunOS') {
|
|
console.error('Skipping because DTrace not available.');
|
|
process.exit(0);
|
|
}
|
|
|
|
/*
|
|
* Some functions to create a recognizable stack.
|
|
*/
|
|
var frames = [ 'stalloogle', 'bagnoogle', 'doogle' ];
|
|
var expected;
|
|
|
|
var stalloogle = function (str) {
|
|
expected = str;
|
|
os.loadavg();
|
|
};
|
|
|
|
var bagnoogle = function (arg0, arg1) {
|
|
stalloogle(arg0 + ' is ' + arg1 + ' except that it is read-only');
|
|
};
|
|
|
|
var done = false;
|
|
|
|
var doogle = function () {
|
|
if (!done)
|
|
setTimeout(doogle, 10);
|
|
|
|
bagnoogle('The bfs command', '(almost) like ed(1)');
|
|
};
|
|
|
|
var spawn = require('child_process').spawn;
|
|
var prefix = '/var/tmp/node';
|
|
var corefile = prefix + '.' + process.pid;
|
|
|
|
/*
|
|
* We're going to use DTrace to stop us, gcore us, and set us running again
|
|
* when we call getloadavg() -- with the implicit assumption that our
|
|
* deepest function is the only caller of os.loadavg().
|
|
*/
|
|
var dtrace = spawn('dtrace', [ '-qwn', 'syscall::getloadavg:entry/pid == ' +
|
|
process.pid + '/{ustack(100, 8192); exit(0); }' ]);
|
|
|
|
var output = '';
|
|
|
|
dtrace.stderr.on('data', function (data) {
|
|
console.log('dtrace: ' + data);
|
|
});
|
|
|
|
dtrace.stdout.on('data', function (data) {
|
|
output += data;
|
|
});
|
|
|
|
dtrace.on('exit', function (code) {
|
|
if (code != 0) {
|
|
console.error('dtrace exited with code ' + code);
|
|
process.exit(code);
|
|
}
|
|
|
|
done = true;
|
|
|
|
var sentinel = '(anon) as ';
|
|
var lines = output.split('\n');
|
|
|
|
for (var i = 0; i < lines.length; i++) {
|
|
var line = lines[i];
|
|
|
|
if (line.indexOf(sentinel) == -1 || frames.length === 0)
|
|
continue;
|
|
|
|
var frame = line.substr(line.indexOf(sentinel) + sentinel.length);
|
|
var top = frames.shift();
|
|
|
|
assert.equal(frame.indexOf(top), 0, 'unexpected frame where ' +
|
|
top + ' was expected');
|
|
}
|
|
|
|
assert.equal(frames.length, 0, 'did not find expected frame ' + frames[0]);
|
|
process.exit(0);
|
|
});
|
|
|
|
setTimeout(doogle, 10);
|
|
|