Expose deallocation functions in NodeJS binding

This commit is contained in:
Reuben Morais 2019-04-25 08:49:25 -03:00
parent f397006436
commit 41e6daaff2
4 changed files with 10 additions and 18 deletions

View File

@ -100,7 +100,7 @@ After following the above build and installation instructions, the Node.JS bindi
``` ```
cd native_client/javascript cd native_client/javascript
make package make build
make npm-pack make npm-pack
``` ```

View File

@ -1,5 +1,4 @@
#!/usr/bin/env node #!/usr/bin/env node
'use strict'; 'use strict';
const Fs = require('fs'); const Fs = require('fs');
@ -69,6 +68,7 @@ function metadataToString(metadata) {
for (var i = 0; i < metadata.num_items; ++i) { for (var i = 0; i < metadata.num_items; ++i) {
retval += metadata.items[i].character; retval += metadata.items[i].character;
} }
Ds.FreeMetadata(metadata);
return retval; return retval;
} }
@ -135,5 +135,6 @@ audioStream.on('finish', () => {
} }
const inference_stop = process.hrtime(inference_start); const inference_stop = process.hrtime(inference_start);
console.error('Inference took %ds for %ds audio file.', totalTime(inference_stop), audioLength.toPrecision(4)); console.error('Inference took %ds for %ds audio file.', totalTime(inference_stop), audioLength.toPrecision(4));
Ds.DestroyModel(model);
process.exit(0); process.exit(0);
}); });

View File

@ -28,7 +28,6 @@ using namespace node;
// make sure the string returned by SpeechToText is freed // make sure the string returned by SpeechToText is freed
%typemap(newfree) char* "DS_FreeString($1);"; %typemap(newfree) char* "DS_FreeString($1);";
%typemap(newfree) Metadata* "DS_FreeMetadata($1);";
%newobject DS_SpeechToText; %newobject DS_SpeechToText;
%newobject DS_IntermediateDecode; %newobject DS_IntermediateDecode;
@ -61,19 +60,8 @@ using namespace node;
%append_output(SWIG_NewPointerObj(%as_voidptr(*$1), $*1_descriptor, 0)); %append_output(SWIG_NewPointerObj(%as_voidptr(*$1), $*1_descriptor, 0));
} }
// extend ModelState with a destructor so that DestroyModel will be called
// when the JavaScript object gets finalized.
%nodefaultctor ModelState; %nodefaultctor ModelState;
%nodefaultdtor ModelState; %nodefaultdtor ModelState;
struct ModelState {};
%extend ModelState {
~ModelState() {
DS_DestroyModel($self);
}
}
%nodefaultdtor Metadata; %nodefaultdtor Metadata;
%nodefaultctor Metadata; %nodefaultctor Metadata;
%nodefaultctor MetadataItem; %nodefaultctor MetadataItem;
@ -94,9 +82,6 @@ struct ModelState {};
v8::Handle<v8::Value> result = SWIGV8_ARRAY_NEW(); v8::Handle<v8::Value> result = SWIGV8_ARRAY_NEW();
return result; return result;
} }
~Metadata() {
DS_FreeMetadata($self);
}
} }
%rename ("%(strip:[DS_])s") ""; %rename ("%(strip:[DS_])s") "";

View File

@ -75,7 +75,13 @@ Model.prototype.finishStreamWithMetadata = function() {
return binding.FinishStreamWithMetadata.apply(null, arguments); return binding.FinishStreamWithMetadata.apply(null, arguments);
} }
function DestroyModel(model) {
return binding.DestroyModel(model._impl);
}
module.exports = { module.exports = {
Model: Model, Model: Model,
printVersions: binding.PrintVersions printVersions: binding.PrintVersions,
DestroyModel: DestroyModel,
FreeMetadata: binding.FreeMetadata
}; };