aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/embind/embind.js15
-rw-r--r--tests/embind/embind.test.js1
2 files changed, 13 insertions, 3 deletions
diff --git a/src/embind/embind.js b/src/embind/embind.js
index 124ea569..8c8d73ad 100644
--- a/src/embind/embind.js
+++ b/src/embind/embind.js
@@ -1216,9 +1216,18 @@ RegisteredPointer.prototype['fromWireType'] = function fromWireType(ptr) {
var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);
if (undefined !== registeredInstance) {
- var rv = registeredInstance['clone']();
- this.destructor(ptr);
- return rv;
+ // JS object has been neutered, time to repopulate it
+ if (0 === registeredInstance.$$.count.value) {
+ registeredInstance.$$.ptr = rawPointer;
+ registeredInstance.$$.smartPtr = ptr;
+ return registeredInstance['clone']();
+ } else {
+ // else, just increment reference count on existing object
+ // it already has a reference to the smart pointer
+ var rv = registeredInstance['clone']();
+ this.destructor(ptr);
+ return rv;
+ }
}
function makeDefaultHandle() {
diff --git a/tests/embind/embind.test.js b/tests/embind/embind.test.js
index a6b2e98c..432202ff 100644
--- a/tests/embind/embind.test.js
+++ b/tests/embind/embind.test.js
@@ -2410,6 +2410,7 @@ module({
var back = holder.get();
assert.equal(back, instance);
holder.delete();
+ back.delete();
});
});