Skip to content

Commit

Permalink
fix: make PyObject cleanup thread-safe in free-threaded Python and re…
Browse files Browse the repository at this point in the history
…duce contention (#176)

* Fix a bug in Py Obj cleanup & reduce contention

* Remove unneeded code

* enable the java-to-python tests

* Revert "enable the java-to-python tests"

This reverts commit 5de1fe2.
  • Loading branch information
jmao-denver authored Dec 5, 2024
1 parent 2e9aa28 commit 7dcef19
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 10 deletions.
5 changes: 0 additions & 5 deletions src/main/java/org/jpy/PyObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ public class PyObject implements AutoCloseable {

private static final AtomicReference<Thread> CLEANUP_THREAD = new AtomicReference<>();

private static final boolean CLEANUP_ON_INIT = Boolean.parseBoolean(System.getProperty("PyObject.cleanup_on_init", "true"));

private static final boolean CLEANUP_ON_THREAD = Boolean.parseBoolean(System.getProperty("PyObject.cleanup_on_thread", "true"));

private static void startCleanupThread() {
Expand Down Expand Up @@ -71,9 +69,6 @@ public static int cleanup() {
PyObject(long pointer, boolean fromJNI) {
state = new PyObjectState(pointer);
if (fromJNI) {
if (CLEANUP_ON_INIT) {
REFERENCES.threadSafeCleanup(); // only performs *one* cleanup
}
if (CLEANUP_ON_THREAD) {
// ensures that we've only started after python has been started, and we know there is something to cleanup
startCleanupThread();
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/org/jpy/PyObjectReferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,7 @@ private Reference<PyObject> asRef(PyObject pyObject) {
/**
* This should *only* be invoked through the proxy, or when we *know* we have the GIL.
*/
public int threadSafeCleanup() {
return threadSafeCleanup(buffer);
}

private int threadSafeCleanup(long[] buffer) {
public synchronized int threadSafeCleanup() {
return PyLib.ensureGil(() -> {
int index = 0;
while (index < buffer.length) {
Expand Down

0 comments on commit 7dcef19

Please sign in to comment.