diff --git a/src/perf_tests/Python.PerformanceTests.csproj b/src/perf_tests/Python.PerformanceTests.csproj
index cc8bf80f3..cc2b83e05 100644
--- a/src/perf_tests/Python.PerformanceTests.csproj
+++ b/src/perf_tests/Python.PerformanceTests.csproj
@@ -13,7 +13,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
compile
@@ -25,7 +25,7 @@
-
+
diff --git a/src/runtime/Finalizer.cs b/src/runtime/Finalizer.cs
index 00f3527a9..05c498443 100644
--- a/src/runtime/Finalizer.cs
+++ b/src/runtime/Finalizer.cs
@@ -106,6 +106,7 @@ internal IncorrectRefCountException(IntPtr ptr)
#endregion
+ [ForbidPythonThreads]
public void Collect() => this.DisposeAll();
internal void ThrottledCollect()
diff --git a/src/runtime/Native/NewReference.cs b/src/runtime/Native/NewReference.cs
index 91ebbdb01..00e01d75f 100644
--- a/src/runtime/Native/NewReference.cs
+++ b/src/runtime/Native/NewReference.cs
@@ -47,7 +47,7 @@ public PyObject MoveToPyObject()
///
public NewReference Move()
{
- var result = new NewReference(this);
+ var result = DangerousFromPointer(this.DangerousGetAddress());
this.pointer = default;
return result;
}
diff --git a/src/runtime/Properties/AssemblyInfo.cs b/src/runtime/Properties/AssemblyInfo.cs
index 5590ef46f..b8481e7cb 100644
--- a/src/runtime/Properties/AssemblyInfo.cs
+++ b/src/runtime/Properties/AssemblyInfo.cs
@@ -4,5 +4,5 @@
[assembly: InternalsVisibleTo("Python.EmbeddingTest, PublicKey=00240000048000009400000006020000002400005253413100040000110000005ffd8f49fb44ab0641b3fd8d55e749f716e6dd901032295db641eb98ee46063cbe0d4a1d121ef0bc2af95f8a7438d7a80a3531316e6b75c2dae92fb05a99f03bf7e0c03980e1c3cfb74ba690aca2f3339ef329313bcc5dccced125a4ffdc4531dcef914602cd5878dc5fbb4d4c73ddfbc133f840231343e013762884d6143189")]
[assembly: InternalsVisibleTo("Python.Test, PublicKey=00240000048000009400000006020000002400005253413100040000110000005ffd8f49fb44ab0641b3fd8d55e749f716e6dd901032295db641eb98ee46063cbe0d4a1d121ef0bc2af95f8a7438d7a80a3531316e6b75c2dae92fb05a99f03bf7e0c03980e1c3cfb74ba690aca2f3339ef329313bcc5dccced125a4ffdc4531dcef914602cd5878dc5fbb4d4c73ddfbc133f840231343e013762884d6143189")]
-[assembly: AssemblyVersion("2.0.16")]
-[assembly: AssemblyFileVersion("2.0.16")]
+[assembly: AssemblyVersion("2.0.17")]
+[assembly: AssemblyFileVersion("2.0.17")]
diff --git a/src/runtime/Python.Runtime.csproj b/src/runtime/Python.Runtime.csproj
index 607f1dc41..dc773267a 100644
--- a/src/runtime/Python.Runtime.csproj
+++ b/src/runtime/Python.Runtime.csproj
@@ -5,7 +5,7 @@
Python.Runtime
Python.Runtime
QuantConnect.pythonnet
- 2.0.16
+ 2.0.17
false
LICENSE
https://github.com/pythonnet/pythonnet
diff --git a/src/runtime/Runtime.cs b/src/runtime/Runtime.cs
index 04f828a29..effbe2935 100644
--- a/src/runtime/Runtime.cs
+++ b/src/runtime/Runtime.cs
@@ -362,6 +362,7 @@ static bool TryCollectingGarbage(int runs, bool forceBreakLoops)
///
/// Total number of GC loops to run
/// true if a steady state was reached upon the requested number of tries (e.g. on the last try no objects were collected).
+ [ForbidPythonThreads]
public static bool TryCollectingGarbage(int runs)
=> TryCollectingGarbage(runs, forceBreakLoops: false);
diff --git a/tests/test_constructors.py b/tests/test_constructors.py
index 8e7ef2794..f67e7e2f8 100644
--- a/tests/test_constructors.py
+++ b/tests/test_constructors.py
@@ -3,6 +3,7 @@
"""Test CLR class constructor support."""
import pytest
+import sys
import System
@@ -69,3 +70,32 @@ def test_default_constructor_fallback():
with pytest.raises(TypeError):
ob = DefaultConstructorMatching("2")
+
+def test_constructor_leak():
+ from System import Uri
+ from Python.Runtime import Runtime
+
+ uri = Uri("http://www.python.org")
+ Runtime.TryCollectingGarbage(20)
+ ref_count = sys.getrefcount(uri)
+
+ # check disabled due to GC uncertainty
+ # assert ref_count == 1
+
+
+
+def test_string_constructor():
+ from System import String, Char, Array
+
+ ob = String('A', 10)
+ assert ob == 'A' * 10
+
+ arr = Array[Char](10)
+ for i in range(10):
+ arr[i] = Char(str(i))
+
+ ob = String(arr)
+ assert ob == "0123456789"
+
+ ob = String(arr, 5, 4)
+ assert ob == "5678"