Skip to content

Commit

Permalink
buffer: reapply 07c0667
Browse files Browse the repository at this point in the history
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: #2487
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
  • Loading branch information
indutny authored and rvagg committed Aug 22, 2015
1 parent c1ce423 commit 1cd794f
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions lib/buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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') {
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}

Expand Down

0 comments on commit 1cd794f

Please sign in to comment.