From 80937a353b7ca66bbc213e1c52cca2c0fa22ac7a Mon Sep 17 00:00:00 2001 From: Stjepan Rajko Date: Wed, 7 Sep 2016 10:27:39 -0700 Subject: [PATCH 1/2] Mark tree entry as selfFreeing --- generate/input/descriptor.json | 11 +++++++++-- generate/scripts/helpers.js | 7 +------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index a116184ef..29b5b65cc 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -2499,10 +2499,16 @@ } }, "git_tree_entry_byindex": { - "jsFunctionName": "_entryByIndex" + "jsFunctionName": "_entryByIndex", + "return": { + "ownedByThis": true + } }, "git_tree_entry_byname": { - "jsFunctionName": "_entryByName" + "jsFunctionName": "_entryByName", + "return": { + "ownedByThis": true + } }, "git_tree_entrycount": { "jsFunctionName": "entryCount" @@ -2539,6 +2545,7 @@ } }, "tree_entry": { + "selfFreeing": true, "dupFunction": "git_tree_entry_dup", "freeFunctionName": "git_tree_entry_free", "functions": { diff --git a/generate/scripts/helpers.js b/generate/scripts/helpers.js index bb4953e8e..f3bd3772f 100644 --- a/generate/scripts/helpers.js +++ b/generate/scripts/helpers.js @@ -251,7 +251,7 @@ var Helpers = { arg.cppClassName = Helpers.cTypeToCppName(arg.cType); arg.jsClassName = utils.titleCase(Helpers.cTypeToJsName(arg.cType)); - var libgitType = Helpers.decorateLibgitType(arg, libgit2.types, enums); + Helpers.decorateLibgitType(arg, libgit2.types, enums); // Some arguments can be callbacks if (Helpers.isCallbackFunction(type)) { @@ -280,11 +280,6 @@ var Helpers = { argOverrides.cppClassName !== "Array" && _.every(allArgs, function(_arg) { return !_arg.isSelf; }); } - - if (arg.isReturn && libgitType) { - arg.selfFreeing = libgitType.selfFreeing; - } - if (arg.isReturn && fnDef.return && fnDef.return.type === "int") { fnDef.return.isErrorCode = true; fnDef.isAsync = true; From 0a707b00a43d2d39109e37fae71b62a75245824f Mon Sep 17 00:00:00 2001 From: Stjepan Rajko Date: Fri, 23 Sep 2016 14:26:52 -0700 Subject: [PATCH 2/2] Add tree entry leak test --- test/tests/tree_entry.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/tests/tree_entry.js b/test/tests/tree_entry.js index 178bf1168..b4d0706c5 100644 --- a/test/tests/tree_entry.js +++ b/test/tests/tree_entry.js @@ -2,6 +2,8 @@ var assert = require("assert"); var path = require("path"); var local = path.join.bind(path, __dirname); +var leakTest = require("../utils/leak_test"); + describe("TreeEntry", function() { var NodeGit = require("../../"); var Repository = NodeGit.Repository; @@ -153,4 +155,15 @@ describe("TreeEntry", function() { assert.equal(entry.isSubmodule(), false); }); }); + + it("does not leak", function() { + var test = this; + + return leakTest(NodeGit.TreeEntry, function() { + return test.commit.getTree() + .then(function(tree) { + return tree.entryByPath("example"); + }); + }); + }); });