From 1aaa429454c45edae9d8e6e2fec36f98b9a608bf Mon Sep 17 00:00:00 2001 From: Tyler Ang-Wanek Date: Wed, 9 Jun 2021 09:29:59 -0700 Subject: [PATCH] Demonstrate memory leak --- generate/templates/manual/src/nodegit_wrapper.cc | 4 ++++ test/tests/worker.js | 7 +++---- test/utils/worker.js | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/generate/templates/manual/src/nodegit_wrapper.cc b/generate/templates/manual/src/nodegit_wrapper.cc index 66b208c66..e219b6907 100644 --- a/generate/templates/manual/src/nodegit_wrapper.cc +++ b/generate/templates/manual/src/nodegit_wrapper.cc @@ -1,6 +1,9 @@ +#include + template NodeGitWrapper::NodeGitWrapper(typename Traits::cType *raw, bool selfFreeing, v8::Local owner) : nodegitContext(nodegit::Context::GetCurrentContext()) { + std::cout << "::" << Traits::className() << "()" << std::endl; if (Traits::isSingleton) { ReferenceCounter::incrementCountForPointer((void *)raw); this->raw = raw; @@ -45,6 +48,7 @@ NodeGitWrapper::NodeGitWrapper(const char *error) template NodeGitWrapper::~NodeGitWrapper() { + std::cout << "::~" << Traits::className() << "()" << std::endl; if (Traits::isFreeable && selfFreeing) { Traits::free(raw); SelfFreeingInstanceCount--; diff --git a/test/tests/worker.js b/test/tests/worker.js index e141b58aa..376a2fe14 100644 --- a/test/tests/worker.js +++ b/test/tests/worker.js @@ -53,9 +53,9 @@ if (Worker) { }); for (let i = 0; i < 5; ++i) { - it(`can kill worker thread while in use #${i}`, function(done) { // jshint ignore:line + it.only(`can kill worker thread while in use #${i}`, function(done) { // jshint ignore:line const workerPath = local("../utils/worker.js"); - const worker = new Worker(workerPath, { + const worker = new Worker(workerPath, { workerData: { clonePath, url: "https://github.com/nodegit/test.git" @@ -64,10 +64,9 @@ if (Worker) { worker.on("message", (message) => { switch (message) { case "init": - setTimeout(() => { worker.terminate(); }, 500); break; case "success": - assert.fail(); + worker.terminate(); break; case "failure": assert.fail(); diff --git a/test/utils/worker.js b/test/utils/worker.js index 6f2d21840..ad1e94876 100644 --- a/test/utils/worker.js +++ b/test/utils/worker.js @@ -5,6 +5,7 @@ const { } = require("worker_threads"); const assert = require("assert"); const NodeGit = require("../../"); +const { promisify } = require("util"); if (isMainThread) { throw new Error("Must be run via worker thread"); @@ -35,4 +36,5 @@ return NodeGit.Clone(url, clonePath, opts).then((_repository) => { }).then((branch) => { assert.ok(branch instanceof NodeGit.Reference); parentPort.postMessage("success"); + return promisify(setTimeout)(5000); }).catch(() => parentPort.postMessage("failure"));