diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-07 17:30:53 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-07 17:30:53 -0700 |
commit | 1cb8ef33e79e6f5a469d23910880720de14336fe (patch) | |
tree | 20296993bd1e61ee2447bf04b0a2c7f3c6c0f6fd | |
parent | e20ca6690ca787bd0289e945de60b1c5d09f28ae (diff) |
manually fill heap history in write targets of VFS.write|read into the heap
-rw-r--r-- | src/library.js | 20 | ||||
-rw-r--r-- | src/preamble.js | 9 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/library.js b/src/library.js index adf21a8c..6ef065e0 100644 --- a/src/library.js +++ b/src/library.js @@ -2701,6 +2701,11 @@ LibraryManager.library = { } try { var slab = {{{ makeGetSlabs('buf', 'i8', true) }}}; +#if SAFE_HEAP +#if USE_TYPED_ARRAYS == 0 + SAFE_HEAP_FILL_HISTORY(buf, buf+nbyte, 'i8'); // VFS does not use makeSetValues, so we need to do it manually +#endif +#endif return VFS.read(stream, slab, buf, nbyte, offset); } catch (e) { FS.handleFSError(e); @@ -2723,6 +2728,11 @@ LibraryManager.library = { try { var slab = {{{ makeGetSlabs('buf', 'i8', true) }}}; +#if SAFE_HEAP +#if USE_TYPED_ARRAYS == 0 + SAFE_HEAP_FILL_HISTORY(buf, buf+nbyte, 'i8'); // VFS does not use makeSetValues, so we need to do it manually +#endif +#endif return VFS.read(stream, slab, buf, nbyte); } catch (e) { FS.handleFSError(e); @@ -2824,6 +2834,11 @@ LibraryManager.library = { } try { var slab = {{{ makeGetSlabs('buf', 'i8', true) }}}; +#if SAFE_HEAP +#if USE_TYPED_ARRAYS == 0 + SAFE_HEAP_FILL_HISTORY(buf, buf+nbyte, 'i8'); // VFS does not use makeSetValues, so we need to do it manually +#endif +#endif return VFS.write(stream, slab, buf, nbyte, offset); } catch (e) { FS.handleFSError(e); @@ -2846,6 +2861,11 @@ LibraryManager.library = { try { var slab = {{{ makeGetSlabs('buf', 'i8', true) }}}; +#if SAFE_HEAP +#if USE_TYPED_ARRAYS == 0 + SAFE_HEAP_FILL_HISTORY(buf, buf+nbyte, 'i8'); // VFS does not use makeSetValues, so we need to do it manually +#endif +#endif return VFS.write(stream, slab, buf, nbyte); } catch (e) { FS.handleFSError(e); diff --git a/src/preamble.js b/src/preamble.js index 2955c885..585db832 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -156,6 +156,15 @@ function SAFE_HEAP_COPY_HISTORY(dest, src) { SAFE_HEAP_ACCESS(dest, HEAP_HISTORY[dest] || null, true, false); } +function SAFE_HEAP_FILL_HISTORY(from, to, type) { +#if SAFE_HEAP_LOG + Module.print('SAFE_HEAP fill: ' + [from, to, type]); +#endif + for (var i = from; i < to; i++) { + HEAP_HISTORY[i] = type; + } +} + //========================================== #endif |