8000 Make sure recover the environment · losttech/pythonnet@481cb4f · GitHub
[go: up one dir, main page]

Skip to content

Commit 481cb4f

Browse files
amos402Martin-Molinero
authored andcommitted
Make sure recover the environment
1 parent 9281157 commit 481cb4f

File tree

1 file changed

+31
-24
lines changed

1 file changed

+31
-24
lines changed

src/embed_tests/TestFinalizer.cs

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public void SetUp()
2222
}
2323
Environment.SetEnvironmentVariable("PYTHONMALLOC", "malloc");
2424
PythonEngine.Initialize();
25+
Exceptions.Clear();
2526
}
2627

2728
[TearDown]
@@ -56,34 +57,40 @@ public void CollectBasicObject()
5657
called = true;
5758
};
5859
Finalizer.Instance.CollectOnce += handler;
59-
FullGCCollect();
60-
PyLong obj = new PyLong(1024);
61-
62-
WeakReference shortWeak = new WeakReference(obj);
63-
WeakReference longWeak = new WeakReference(obj, true);
64-
obj = null;
65-
FullGCCollect();
66-
// The object has been resurrected
67-
// FIXME: Sometimes the shortWeak would get alive
68-
//Assert.IsFalse(shortWeak.IsAlive);
69-
Assert.IsTrue(longWeak.IsAlive);
70-
71-
Assert.IsFalse(called);
72-
var garbage = Finalizer.Instance.GetCollectedObjects();
73-
Assert.NotZero(garbage.Count);
74-
// FIXME: If make some query for garbage,
75-
// the above case will failed Assert.IsFalse(shortWeak.IsAlive)
76-
//Assert.IsTrue(garbage.All(T => T.IsAlive));
60+
try
61+
{
62+
FullGCCollect();
63+
PyLong obj = new PyLong(1024);
64+
65+
WeakReference shortWeak = new WeakReference(obj);
66+
WeakReference longWeak = new WeakReference(obj, true);
67+
obj = null;
68+
FullGCCollect();
69+
// The object has been resurrected
70+
// FIXME: Sometimes the shortWeak would get alive
71+
//Assert.IsFalse(shortWeak.IsAlive);
72+
Assert.IsTrue(longWeak.IsAlive);
73+
74+
Assert.IsFalse(called);
75+
var garbage = Finalizer.Instance.GetCollectedObjects();
76+
Assert.NotZero(garbage.Count);
77+
// FIXME: If make some query for garbage,
78+
// the above case will failed Assert.IsFalse(shortWeak.IsAlive)
79+
//Assert.IsTrue(garbage.All(T => T.IsAlive));
7780

78-
Finalizer.Instance.CallPendingFinalizers();
79-
Assert.IsTrue(called);
81+
Finalizer.Instance.CallPendingFinalizers();
82+
Assert.IsTrue(called);
8083

81-
FullGCCollect();
82-
//Assert.IsFalse(garbage.All(T => T.IsAlive));
84+
FullGCCollect();
85+
//Assert.IsFalse(garbage.All(T => T.IsAlive));
8386

84-
Assert.IsNull(longWeak.Target);
87+
Assert.IsNull(longWeak.Target);
88+
}
89+
finally
90+
{
91+
Finalizer.Instance.CollectOnce -= handler;
92+
}
8593

86-
Finalizer.Instance.CollectOnce -= handler;
8794
}
8895

8996
private static long CompareWithFinalizerOn(PyObject pyCollect, bool enbale)

0 commit comments

Comments
 (0)
0