glx error parsers #49

This commit is contained in:
Andrey Sidorov 2014-03-08 19:04:49 +11:00
parent 0113db66af
commit 73dda10b1a
2 changed files with 32 additions and 17 deletions

View file

@ -294,6 +294,28 @@ exports.requireExt = function(display, callback)
return require('./glxrender')(this, ctx);
}
var errors = [
"context",
"contect state",
"drawable",
"pixmap",
"context tag",
"current window",
"Render request",
"RenderLarge request",
"(unsupported) VendorPrivate request",
"FB config",
"pbuffer",
"current drawable",
"window"
];
errors.forEach(function(message, code) {
X.errorParsers[ext.firstError + code] = function(err) {
err.message = "GLX: Bad " + message;
};
});
callback(ext);
});
}

View file

@ -418,7 +418,6 @@ XClient.prototype.expectReplyHeader = function()
var error = new Error();
error.error = error_code;
error.seq = seq_num;
error.message = xerrors.errorText[error_code];
if (client.options.debug) {
error.longstack = client.seq2stack[error.seq]
console.log(client.seq2stack[error.seq].stack);
@ -426,24 +425,18 @@ XClient.prototype.expectReplyHeader = function()
// unpack error packet (32 bytes for all error types, 8 of them in CCSL header)
client.pack_stream.get(24, function(buf) {
var res = buf.unpack('SC');
error.message = xerrors.errorText[error_code];
error.badParam = bad_value;
error.minorOpcode = res[0];
error.majorOpcode = res[1];
var extUnpacker = client.errorParsers[type];
if (extUnpacker) {
var event = extUnpacker(type, seq_num, bad_value, body);
client.emit(error, event);
client.expectReplyHeader();
return;
}
// TODO: dispatch, use sequence number
//TODO: add more generic way to read common values
// if (error_code == 14)
{
var res = buf.unpack('SC');
error.badParam = bad_value;
error.minorOpcode = res[0];
error.majorOpcode = res[1];
var extUnpacker = client.errorParsers[error_code];
if (extUnpacker) {
extUnpacker(error, error_code, seq_num, bad_value, buf);
}
var handler = client.replies[seq_num];
if (handler) {
var callback = handler[1];