X Tutup
Skip to content

Commit 0ee1f2f

Browse files
committed
PyBuffer fixes 3
1 parent cdfdf9a commit 0ee1f2f

File tree

2 files changed

+31
-25
lines changed

2 files changed

+31
-25
lines changed

src/embed_tests/TestPyBuffer.cs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,22 @@ public void TestBufferWrite()
2424

2525
string bufferTestString = "hello world! !$%&/()=?";
2626

27-
using (var scope = Py.CreateScope())
27+
using (Py.GIL())
2828
{
29-
scope.Exec($"arr = bytearray({bufferTestString.Length})");
30-
PyObject pythonArray = scope.Get("arr");
31-
byte[] managedArray = new UTF8Encoding().GetBytes(bufferTestString);
32-
33-
using (PyBuffer buf = pythonArray.GetBuffer())
29+
using (var scope = Py.CreateScope())
3430
{
35-
buf.Write(managedArray, 0, managedArray.Length);
36-
}
31+
scope.Exec($"arr = bytearray({bufferTestString.Length})");
32+
PyObject pythonArray = scope.Get("arr");
33+
byte[] managedArray = new UTF8Encoding().GetBytes(bufferTestString);
3734

38-
string result = scope.Eval("arr.decode('utf-8')").ToString();
39-
Assert.IsTrue(result == bufferTestString);
35+
using (PyBuffer buf = pythonArray.GetBuffer())
36+
{
37+
buf.Write(managedArray, 0, managedArray.Length);
38+
}
39+
40+
string result = scope.Eval("arr.decode('utf-8')").ToString();
41+
Assert.IsTrue(result == bufferTestString);
42+
}
4043
}
4144
}
4245

@@ -47,19 +50,22 @@ public void TestBufferRead()
4750

4851
string bufferTestString = "hello world! !$%&/()=?";
4952

50-
using (var scope = Py.CreateScope())
53+
using (Py.GIL())
5154
{
52-
scope.Exec($"arr = b'{bufferTestString}'");
53-
PyObject pythonArray = scope.Get("arr");
54-
byte[] managedArray = new byte[bufferTestString.Length];
55-
56-
using (PyBuffer buf = pythonArray.GetBuffer())
55+
using (var scope = Py.CreateScope())
5756
{
58-
buf.Read(managedArray, 0, managedArray.Length);
59-
}
57+
scope.Exec($"arr = b'{bufferTestString}'");
58+
PyObject pythonArray = scope.Get("arr");
59+
byte[] managedArray = new byte[bufferTestString.Length];
6060

61-
string result = new UTF8Encoding().GetString(managedArray);
62-
Assert.IsTrue(result == bufferTestString);
61+
using (PyBuffer buf = pythonArray.GetBuffer())
62+
{
63+
buf.Read(managedArray, 0, managedArray.Length);
64+
}
65+
66+
string result = new UTF8Encoding().GetString(managedArray);
67+
Assert.IsTrue(result == bufferTestString);
68+
}
6369
}
6470
}
6571
}

src/runtime/pybuffer.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -226,10 +226,10 @@ private void Dispose(bool disposing)
226226
}
227227
}
228228

229-
//~PyBuffer()
230-
//{
231-
// Dispose(false);
232-
//}
229+
~PyBuffer()
230+
{
231+
Dispose(false);
232+
}
233233

234234
/// <summary>
235235
/// Release the buffer view and decrement the reference count for view->obj. This function MUST be called when the buffer is no longer being used, otherwise reference leaks may occur.
@@ -238,7 +238,7 @@ private void Dispose(bool disposing)
238238
public void Dispose()
239239
{
240240
Dispose(true);
241-
//GC.SuppressFinalize(this);
241+
GC.SuppressFinalize(this);
242242
}
243243
}
244244
}

0 commit comments

Comments
 (0)
X Tutup