diff options
author | Todd Lee <tlee@imvu.com> | 2012-11-26 16:49:52 -0800 |
---|---|---|
committer | Jukka Jylänki <jujjyl@gmail.com> | 2013-04-12 14:22:07 +0300 |
commit | ab18c1107d8493b6a1ef0c19b5210a756cb4709c (patch) | |
tree | e78d1b0b04e6124ca2473d21d4d79a43872a8408 | |
parent | 50c29dc01ec880fbd8f708be7a3c9c865645d46f (diff) |
there were some incorrect handling of memory alloc/dealloc when passing around vector of smart pointer (or whatever type that needs manual deletion)
-rwxr-xr-x | src/embind/embind.js | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js index 1cae55ff..504db37c 100755 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -456,8 +456,21 @@ function __embind_register_vector( name: name, fromWireType: function(ptr) { var arr = []; - var n = length(ptr); + Object.defineProperty(arr, 'delete', { + writable: false, + enumerable: false, + configurable: false, + value: function() { + var needsToBeDeleted = elementType.hasOwnProperty('Handle'); + for (var i = 0; i < arr.length; i++) { + if (needsToBeDeleted) { + arr[i].delete(); + } + } + } + }); + var n = length(ptr); for (var i = 0; i < n; i++) { var v = elementType.fromWireType(getter(ptr, i)); arr.push(v); @@ -471,6 +484,8 @@ function __embind_register_vector( for (var val in o) { setter(vec, elementType.toWireType(destructors, o[val])); } + runDestructors(destructors); + destructors.push(destructor); destructors.push(vec); return vec; |