mirror of https://github.com/nodejs/node.git
buffer: reapply 07c0667
Original commit message: buffer: align chunks on 8-byte boundary When slicing global pool - ensure that the underlying buffer's data ptr is 8-byte alignment to do not ruin expectations of 3rd party C++ addons. NOTE: 0.10 node.js always returned aligned pointers and io.js should do this too for compatibility. PR-URL: https://github.com/nodejs/node/pull/2487 Reviewed-By: Trevor Norris <trev.norris@gmail.com>pull/2487/merge
parent
68e53ddcba
commit
43660ad37b
|
@ -21,6 +21,15 @@ function createPool() {
|
|||
}
|
||||
|
||||
|
||||
function alignPool() {
|
||||
// Ensure aligned slices
|
||||
if (poolOffset & 0x7) {
|
||||
poolOffset |= 0x7;
|
||||
poolOffset++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function Buffer(arg) {
|
||||
// Common case.
|
||||
if (typeof arg === 'number') {
|
||||
|
@ -66,6 +75,7 @@ function allocate(size) {
|
|||
createPool();
|
||||
var b = binding.slice(allocPool, poolOffset, poolOffset + size);
|
||||
poolOffset += size;
|
||||
alignPool();
|
||||
return b;
|
||||
} else {
|
||||
return binding.create(size);
|
||||
|
@ -86,6 +96,7 @@ function fromString(string, encoding) {
|
|||
var actual = allocPool.write(string, poolOffset, encoding);
|
||||
var b = binding.slice(allocPool, poolOffset, poolOffset + actual);
|
||||
poolOffset += actual;
|
||||
alignPool();
|
||||
return b;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue