http://git-wip-us.apache.org/repos/asf/vxquery/blob/b93e4584/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ArrayNodeConstructorScalarEvaluator.java
----------------------------------------------------------------------
diff --git
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ArrayNodeConstructorScalarEvaluator.java
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ArrayNodeConstructorScalarEvaluator.java
index 924e2c0..05f4498 100644
---
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ArrayNodeConstructorScalarEvaluator.java
+++
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ArrayNodeConstructorScalarEvaluator.java
@@ -44,16 +44,20 @@ public class ArrayNodeConstructorScalarEvaluator extends
AbstractNodeConstructor
throws IOException, SystemException {
ab.reset(mvs);
TaggedValuePointable arg = args[0];
- TaggedValuePointable tempTvp =
ppool.takeOne(TaggedValuePointable.class);
if (arg.getTag() == ValueTag.SEQUENCE_TAG) {
- arg.getValue(sp);
- for (int i = 0; i < sp.getEntryCount(); ++i) {
- sp.getEntry(i, tempTvp);
- ab.addItem(tempTvp);
+ TaggedValuePointable tempTvp =
ppool.takeOne(TaggedValuePointable.class);
+ try {
+ arg.getValue(sp);
+ for (int i = 0; i < sp.getEntryCount(); ++i) {
+ sp.getEntry(i, tempTvp);
+ ab.addItem(tempTvp);
+ }
+ } finally {
+ ppool.giveBack(tempTvp);
}
- ppool.giveBack(tempTvp);
+ } else {
+ ab.addItem(arg);
}
-
ab.finish();
}