[Jython-checkins] jython: BaseBuffer implementation takes care of cascading release().
jeff.allen
jython-checkins at python.org
Sat Aug 27 09:12:25 EDT 2016
https://hg.python.org/jython/rev/4a92b336647a
changeset: 7947:4a92b336647a
user: Jeff Allen <ja.py at farowl.co.uk>
date: Thu Jun 30 12:45:54 2016 +0100
summary:
BaseBuffer implementation takes care of cascading release().
No longer have to override releaseAction() to cascade a release
notification from a sliced view of a PyBuffer.
files:
src/org/python/core/buffer/BaseBuffer.java | 11 +++++-
src/org/python/core/buffer/SimpleBuffer.java | 9 -----
src/org/python/core/buffer/SimpleNIOBuffer.java | 8 ----
src/org/python/core/buffer/SimpleStringBuffer.java | 7 ----
src/org/python/core/buffer/SimpleWritableBuffer.java | 8 ----
src/org/python/core/buffer/Strided1DBuffer.java | 9 -----
src/org/python/core/buffer/Strided1DNIOBuffer.java | 7 ----
src/org/python/core/buffer/Strided1DWritableBuffer.java | 8 ----
src/org/python/core/buffer/ZeroByteBuffer.java | 6 ---
tests/java/org/python/core/PyBufferNIOTest.java | 13 -------
tests/java/org/python/core/PyBufferTest.java | 17 +--------
11 files changed, 12 insertions(+), 91 deletions(-)
diff --git a/src/org/python/core/buffer/BaseBuffer.java b/src/org/python/core/buffer/BaseBuffer.java
--- a/src/org/python/core/buffer/BaseBuffer.java
+++ b/src/org/python/core/buffer/BaseBuffer.java
@@ -580,13 +580,22 @@
* equals the number of <code>getBuffer</code> calls), the implementation here calls
* {@link #releaseAction()}, which the implementer of a specific buffer type should override if
* it needs specific actions to take place.
+ * <p>
+ * Note that, when this is a sliced view obtained from another <code>PyBuffer</code> the
+ * implementation in <code>BaseBuffer</code> automatically sends one <code>release()</code>
+ * Sub-classes should not propagate the release themselves when overriding
+ * {@link #releaseAction()}.
*/
@Override
public void release() {
if (--exports == 0) {
// This is a final release.
releaseAction();
- // XXX Consider adding release of root if root!=this so sliced need not
+ // We have to release the root too if we are not a root.
+ PyBuffer root = getRoot();
+ if (root != this) {
+ root.release();
+ }
} else if (exports < 0) {
// Buffer already had 0 exports. (Put this right, in passing.)
exports = 0;
diff --git a/src/org/python/core/buffer/SimpleBuffer.java b/src/org/python/core/buffer/SimpleBuffer.java
--- a/src/org/python/core/buffer/SimpleBuffer.java
+++ b/src/org/python/core/buffer/SimpleBuffer.java
@@ -9,7 +9,6 @@
*/
public class SimpleBuffer extends BaseArrayBuffer {
-
/**
* Provide an instance of <code>SimpleBuffer</code> with navigation variables initialised, for
* sub-class use. The buffer ({@link #storage}, {@link #index0}), and the {@link #shape} array
@@ -199,13 +198,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // We have to release the root too if ours was final.
- root.release();
- }
-
}
-
}
diff --git a/src/org/python/core/buffer/SimpleNIOBuffer.java b/src/org/python/core/buffer/SimpleNIOBuffer.java
--- a/src/org/python/core/buffer/SimpleNIOBuffer.java
+++ b/src/org/python/core/buffer/SimpleNIOBuffer.java
@@ -185,13 +185,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // We have to release the root too if ours was final.
- root.release();
- }
-
}
-
}
diff --git a/src/org/python/core/buffer/SimpleStringBuffer.java b/src/org/python/core/buffer/SimpleStringBuffer.java
--- a/src/org/python/core/buffer/SimpleStringBuffer.java
+++ b/src/org/python/core/buffer/SimpleStringBuffer.java
@@ -214,12 +214,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // We have to release the root too if ours was final.
- root.release();
- }
-
}
}
diff --git a/src/org/python/core/buffer/SimpleWritableBuffer.java b/src/org/python/core/buffer/SimpleWritableBuffer.java
--- a/src/org/python/core/buffer/SimpleWritableBuffer.java
+++ b/src/org/python/core/buffer/SimpleWritableBuffer.java
@@ -130,13 +130,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // We have to release the root too if ours was final.
- root.release();
- }
-
}
-
}
diff --git a/src/org/python/core/buffer/Strided1DBuffer.java b/src/org/python/core/buffer/Strided1DBuffer.java
--- a/src/org/python/core/buffer/Strided1DBuffer.java
+++ b/src/org/python/core/buffer/Strided1DBuffer.java
@@ -208,14 +208,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // XXX Consider making this automatic within BaseBuffer.release() when getRoot()!=this
- // We have to release the root too if ours was final.
- root.release();
- }
-
}
-
}
diff --git a/src/org/python/core/buffer/Strided1DNIOBuffer.java b/src/org/python/core/buffer/Strided1DNIOBuffer.java
--- a/src/org/python/core/buffer/Strided1DNIOBuffer.java
+++ b/src/org/python/core/buffer/Strided1DNIOBuffer.java
@@ -200,12 +200,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // We have to release the root too if ours was final.
- root.release();
- }
-
}
}
diff --git a/src/org/python/core/buffer/Strided1DWritableBuffer.java b/src/org/python/core/buffer/Strided1DWritableBuffer.java
--- a/src/org/python/core/buffer/Strided1DWritableBuffer.java
+++ b/src/org/python/core/buffer/Strided1DWritableBuffer.java
@@ -116,13 +116,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // We have to release the root too if ours was final.
- root.release();
- }
-
}
-
}
diff --git a/src/org/python/core/buffer/ZeroByteBuffer.java b/src/org/python/core/buffer/ZeroByteBuffer.java
--- a/src/org/python/core/buffer/ZeroByteBuffer.java
+++ b/src/org/python/core/buffer/ZeroByteBuffer.java
@@ -184,11 +184,5 @@
protected PyBuffer getRoot() {
return root;
}
-
- @Override
- public void releaseAction() {
- // We have to release the root too if ours was final.
- root.release();
- }
}
}
diff --git a/tests/java/org/python/core/PyBufferNIOTest.java b/tests/java/org/python/core/PyBufferNIOTest.java
--- a/tests/java/org/python/core/PyBufferNIOTest.java
+++ b/tests/java/org/python/core/PyBufferNIOTest.java
@@ -276,19 +276,6 @@
}
@Override
- public void releaseAction() {
- // XXX Consider making this automatic within BaseBuffer.release() when getRoot()!=this
- /*
- * ... so that {@link #release()} takes care of this: sub-classes should not propagate
- * the release themselves when overriding {@link #releaseAction()}.
- */
- // We have to release the root too if ours was final and we are not that root.
- if (root != this) {
- root.release();
- }
- }
-
- @Override
public PyBuffer getBufferSlice(int flags, int start, int count, int stride) {
int newStart = index0 + start * strides[0];
int newStride = strides[0] * stride;
diff --git a/tests/java/org/python/core/PyBufferTest.java b/tests/java/org/python/core/PyBufferTest.java
--- a/tests/java/org/python/core/PyBufferTest.java
+++ b/tests/java/org/python/core/PyBufferTest.java
@@ -945,8 +945,8 @@
} else if (subject instanceof PyByteArray) {
// Size-changing access should fail
try {
- ((PyByteArray)subject).bytearray_extend(Py.One); // Appends one zero byte
- fail("bytearray_extend with exports should fail");
+ ((PyByteArray)subject).bytearray_append(Py.One); // Appends one zero byte
+ fail("bytearray_append with exports should fail");
} catch (Exception e) {
// Success
}
@@ -1509,19 +1509,6 @@
}
@Override
- public void releaseAction() {
- // XXX Consider making this automatic within BaseBuffer.release() when getRoot()!=this
- /*
- * ... so that {@link #release()} takes care of this: sub-classes should not propagate
- * the release themselves when overriding {@link #releaseAction()}.
- */
- // We have to release the root too if ours was final and we are not that root.
- if (root != this) {
- root.release();
- }
- }
-
- @Override
public PyBuffer getBufferSlice(int flags, int start, int length, int stride) {
int newStart = index0 + start * strides[0];
int newStride = strides[0] * stride;
--
Repository URL: https://hg.python.org/jython
More information about the Jython-checkins
mailing list