[Mulgara-svn] r389 - in trunk/src/jar: resolver/java/org/mulgara/resolver tuples/java/org/mulgara/store/tuples
ronald at mulgara.org
ronald at mulgara.org
Wed Aug 29 01:21:25 UTC 2007
Author: ronald
Date: 2007-08-28 20:21:25 -0500 (Tue, 28 Aug 2007)
New Revision: 389
Modified:
trunk/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java
trunk/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java
Log:
Fix file-descriptor leak: close tuples after use. TuplesOperations methods such
as append(), join(), and subtract() make copies of the input tuples, so those
inputs need to be explicitly closed. The missing closes were causing a file
leak (and eventually a too-many-open-files error) in materialized HybridTuples.
Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java 2007-08-29 01:16:15 UTC (rev 388)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/LocalQueryResolver.java 2007-08-29 01:21:25 UTC (rev 389)
@@ -129,17 +129,31 @@
new NVPair(ModelUnion.class, new ModelResolutionHandler() {
public Tuples resolve(QueryEvaluationContext context, ModelExpression modelExpr,
Constraint constraint) throws Exception {
- return TuplesOperations.append(
- ConstraintOperations.resolveModelExpression(context, ((ModelOperation)modelExpr).getLHS(), constraint),
- ConstraintOperations.resolveModelExpression(context, ((ModelOperation)modelExpr).getRHS(), constraint));
+ Tuples lhs = ConstraintOperations.
+ resolveModelExpression(context, ((ModelOperation)modelExpr).getLHS(), constraint);
+ Tuples rhs = ConstraintOperations.
+ resolveModelExpression(context, ((ModelOperation)modelExpr).getRHS(), constraint);
+ try {
+ return TuplesOperations.append(lhs, rhs);
+ } finally {
+ lhs.close();
+ rhs.close();
+ }
}
}),
new NVPair(ModelIntersection.class, new ModelResolutionHandler() {
public Tuples resolve(QueryEvaluationContext context, ModelExpression modelExpr,
Constraint constraint) throws Exception {
- return TuplesOperations.join(
- ConstraintOperations.resolveModelExpression(context, ((ModelOperation)modelExpr).getLHS(), constraint),
- ConstraintOperations.resolveModelExpression(context, ((ModelOperation)modelExpr).getRHS(), constraint));
+ Tuples lhs = ConstraintOperations.
+ resolveModelExpression(context, ((ModelOperation)modelExpr).getLHS(), constraint);
+ Tuples rhs = ConstraintOperations.
+ resolveModelExpression(context, ((ModelOperation)modelExpr).getRHS(), constraint);
+ try {
+ return TuplesOperations.join(lhs, rhs);
+ } finally {
+ lhs.close();
+ rhs.close();
+ }
}
}),
new NVPair(ModelResource.class, new ModelResolutionHandler() {
@@ -157,21 +171,42 @@
{
new NVPair(ConstraintConjunction.class, new ConstraintResolutionHandler() {
public Tuples resolve(QueryEvaluationContext context, ModelExpression modelExpr, ConstraintExpression constraintExpr) throws Exception {
- return TuplesOperations.join(
- context.resolveConstraintOperation(modelExpr, (ConstraintOperation)constraintExpr));
+ List l =
+ context.resolveConstraintOperation(modelExpr, (ConstraintOperation)constraintExpr);
+ try {
+ return TuplesOperations.join(l);
+ } finally {
+ Iterator i = l.iterator();
+ while (i.hasNext()) {
+ ((Tuples)i.next()).close();
+ }
+ }
}
}),
new NVPair(ConstraintDisjunction.class, new ConstraintResolutionHandler() {
public Tuples resolve(QueryEvaluationContext context, ModelExpression modelExpr, ConstraintExpression constraintExpr) throws Exception {
- return TuplesOperations.append(
- context.resolveConstraintOperation(modelExpr, (ConstraintOperation)constraintExpr));
+ List l =
+ context.resolveConstraintOperation(modelExpr, (ConstraintOperation)constraintExpr);
+ try {
+ return TuplesOperations.append(l);
+ } finally {
+ Iterator i = l.iterator();
+ while (i.hasNext()) {
+ ((Tuples)i.next()).close();
+ }
+ }
}
}),
new NVPair(ConstraintDifference.class, new ConstraintResolutionHandler() {
public Tuples resolve(QueryEvaluationContext context, ModelExpression modelExpr, ConstraintExpression constraintExpr) throws Exception {
List args = context.resolveConstraintOperation(modelExpr, (ConstraintOperation)constraintExpr);
assert args.size() == 2;
- return TuplesOperations.subtract((Tuples)args.get(0), (Tuples)args.get(1));
+ try {
+ return TuplesOperations.subtract((Tuples)args.get(0), (Tuples)args.get(1));
+ } finally {
+ ((Tuples)args.get(0)).close();
+ ((Tuples)args.get(1)).close();
+ }
}
}),
new NVPair(ConstraintIs.class, new ConstraintResolutionHandler() {
Modified: trunk/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java
===================================================================
--- trunk/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java 2007-08-29 01:16:15 UTC (rev 388)
+++ trunk/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java 2007-08-29 01:21:25 UTC (rev 389)
@@ -322,7 +322,13 @@
sortedSubtrahend = (null == subtrahend.getComparator()) ? sort(subtrahend) : subtrahend;
}
// return the difference
- return new Difference(minuend, sortedSubtrahend);
+ try {
+ return new Difference(minuend, sortedSubtrahend);
+ } finally {
+ if (sortedSubtrahend != subtrahend) {
+ sortedSubtrahend.close();
+ }
+ }
} catch (RuntimeException re) {
logger.warn("RuntimeException thrown in subtraction", re);
More information about the Mulgara-svn
mailing list