You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/08/16 10:26:50 UTC
svn commit: r1158150 - in /incubator/jena/Jena2/ARQ/trunk:
src-test/org/openjena/riot/lang/ src/org/openjena/atlas/event/
src/org/openjena/riot/ src/org/openjena/riot/lang/
Author: andy
Date: Tue Aug 16 08:26:50 2011
New Revision: 1158150
URL: http://svn.apache.org/viewvc?rev=1158150&view=rev
Log:
Memory leak in SinkTripleToGraph - event listener not being unregistered.
Removed:
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkToGraph.java
Modified:
incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangNQuads.java
incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTrig.java
incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTurtle.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/event/EventManager.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/RiotLoader.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/WebReader.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkQuadsToDataset.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkTriplesToGraph.java
Modified: incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangNQuads.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangNQuads.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangNQuads.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangNQuads.java Tue Aug 16 08:26:50 2011
@@ -76,7 +76,9 @@ public class TestLangNQuads extends Test
{
DatasetGraph dsg = DatasetLib.createDatasetGraphMem() ;
Sink<Quad> sink = RiotLoader.datasetSink(dsg) ;
- parse(sink, string) ;
+ try {
+ parse(sink, string) ;
+ } finally { sink.close() ; }
return dsg ;
}
@@ -100,7 +102,6 @@ public class TestLangNQuads extends Test
parser.setProfile(RiotLib.profile(null, false, true, new ErrorHandlerEx())) ;
parser.parse() ;
}
-
}
/*
Modified: incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTrig.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTrig.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTrig.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTrig.java Tue Aug 16 08:26:50 2011
@@ -80,7 +80,9 @@ public class TestLangTrig extends BaseTe
Tokenizer tokenizer = TokenizerFactory.makeTokenizerString(string) ;
LangTriG parser = RiotReader.createParserTriG(tokenizer, "http://base/", sink) ;
parser.getProfile().setHandler(new ErrorHandlerEx()) ;
- parser.parse();
+ try {
+ parser.parse();
+ } finally { sink.close() ; }
return dsg ;
}
Modified: incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTurtle.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTurtle.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTurtle.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/lang/TestLangTurtle.java Tue Aug 16 08:26:50 2011
@@ -99,7 +99,9 @@ public class TestLangTurtle extends Base
LangTurtle parser = RiotReader.createParserTurtle(tokenizer, "http://base/", sink) ;
parser.getProfile().setHandler(new ErrorHandlerEx()) ;
- parser.parse() ;
+ try {
+ parser.parse() ;
+ } finally { sink.close() ; }
return graph ;
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/event/EventManager.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/event/EventManager.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/event/EventManager.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/atlas/event/EventManager.java Tue Aug 16 08:26:50 2011
@@ -36,6 +36,7 @@ public class EventManager
// ---- The object EventManager itself
// There are 2 event sets: one for specific objects and one for general event types (no object)
+ // MultipMap.MultiMapToList
private Map<Object, Map<EventType, List<EventListener>>> listenersByObject = new HashMap<Object, Map<EventType, List<EventListener>>>() ;
private Map<EventType, List<EventListener>> listenersAllObjects = new HashMap<EventType, List<EventListener>>() ;
@@ -44,7 +45,6 @@ public class EventManager
private void register$(Object object, EventType type, EventListener listener)
{
-
Map<EventType, List<EventListener>> x = get(object) ;
if ( x == null )
{
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/RiotLoader.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/RiotLoader.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/RiotLoader.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/RiotLoader.java Tue Aug 16 08:26:50 2011
@@ -63,8 +63,9 @@ public class RiotLoader
Tokenizer tokenizer = TokenizerFactory.makeTokenizerString(string) ;
LangRIOT parser = RiotReader.createParserQuads(tokenizer, language, baseURI, sink) ;
- parser.parse() ;
- sink.flush();
+ try {
+ parser.parse() ;
+ } finally { sink.close() ; }
return dsg;
}
@@ -97,8 +98,9 @@ public class RiotLoader
Sink<Triple> sink = graphSink(g) ;
Tokenizer tokenizer = TokenizerFactory.makeTokenizerString(string) ;
LangRIOT parser = RiotReader.createParserTriples(tokenizer, language, baseURI, sink) ;
- parser.parse() ;
- sink.flush();
+ try {
+ parser.parse() ;
+ } finally { sink.close() ; }
return g ;
}
@@ -135,12 +137,16 @@ public class RiotLoader
if ( language.isQuads() )
{
Sink<Quad> sink = datasetSink(dataset) ;
- readQuads(input, language, baseURI, sink) ;
+ try {
+ readQuads(input, language, baseURI, sink) ;
+ } finally { sink.close() ; }
}
else
{
Sink<Triple> sink = graphSink(dataset.getDefaultGraph()) ;
- readTriples(input, language, baseURI, sink) ;
+ try {
+ readTriples(input, language, baseURI, sink) ;
+ } finally { sink.close() ; }
}
}
@@ -172,7 +178,9 @@ public class RiotLoader
public static void read(InputStream input, Graph graph, Lang lang, String baseURI)
{
Sink<Triple> sink = graphSink(graph) ;
- readTriples(input, lang, baseURI, sink) ;
+ try {
+ readTriples(input, lang, baseURI, sink) ;
+ } finally { sink.close() ; }
}
/** Parse an input stream and send the quads to the sink */
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/WebReader.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/WebReader.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/WebReader.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/WebReader.java Tue Aug 16 08:26:50 2011
@@ -56,7 +56,9 @@ public class WebReader
throw new RiotException("Can't determine the syntax of <"+uri+"> (media type="+typedInput.getMediaType()+")") ;
Sink<Triple> sink = RiotLoader.graphSink(graph) ;
- RiotLoader.readTriples(typedInput, lang, uri, sink) ;
+ try {
+ RiotLoader.readTriples(typedInput, lang, uri, sink) ;
+ } finally { sink.close() ; }
}
@@ -82,7 +84,9 @@ public class WebReader
throw new RiotException("Can't determine the syntax of <"+uri+"> (media type="+typedInput.getMediaType()+")") ;
Sink<Quad> sink = RiotLoader.datasetSink(dataset) ;
- RiotLoader.readQuads(typedInput, lang, uri, sink) ;
+ try {
+ RiotLoader.readQuads(typedInput, lang, uri, sink) ;
+ } finally { sink.close() ; }
}
private static TypedInputStream open(String uri, Lang lang)
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkQuadsToDataset.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkQuadsToDataset.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkQuadsToDataset.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkQuadsToDataset.java Tue Aug 16 08:26:50 2011
@@ -13,13 +13,12 @@ import com.hp.hpl.jena.sparql.SystemARQ
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
import com.hp.hpl.jena.sparql.core.Quad ;
-/** @see SinkTriplesToGraph */
+/** Send quads to a dataset.
+ * This Sink must be clsosed after use.
+ */
public class SinkQuadsToDataset implements Sink<Quad>
{
- /* See also SinkToGraphTriples */
private final DatasetGraph dataset ;
-// private Node graphNode = null ;
-// private Graph graph = null ;
public SinkQuadsToDataset(DatasetGraph dataset)
{
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkTriplesToGraph.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkTriplesToGraph.java?rev=1158150&r1=1158149&r2=1158150&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkTriplesToGraph.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/lang/SinkTriplesToGraph.java Tue Aug 16 08:26:50 2011
@@ -6,22 +6,71 @@
package org.openjena.riot.lang;
+import org.openjena.atlas.event.Event ;
+import org.openjena.atlas.event.EventListener ;
+import org.openjena.atlas.event.EventManager ;
+import org.openjena.atlas.event.EventType ;
+import org.openjena.atlas.lib.Sink ;
+
import com.hp.hpl.jena.graph.Graph ;
+import com.hp.hpl.jena.graph.GraphEvents ;
import com.hp.hpl.jena.graph.Triple ;
+import com.hp.hpl.jena.sparql.SystemARQ ;
-
-public class SinkTriplesToGraph extends SinkToGraph
+/**
+ * Send triples to a graph.
+ * This Sink must be closed after use.
+ */
+public class SinkTriplesToGraph implements Sink<Triple>
{
+ static final EventType startRead = new EventType("SinkToGraph.StartRead") ;
+ static final EventType finishRead = new EventType("SinkToGraph.FinishRead") ;
+
+ protected final Graph graph ;
+ private EventListener el1 ;
+ private EventListener el2 ;
+
public SinkTriplesToGraph(Graph g)
- {
- super(g) ;
+ {
+ this.graph = g ;
+ // Convert between the new global event system (EventManager)
+ // and old style Jena graph events.
+ el1 = new EventListener(){
+ //@Override
+ public void event(Object dest, Event event)
+ {
+ graph.getEventManager().notifyEvent( graph , GraphEvents.startRead ) ;
+ }
+ } ;
+
+ el2 = new EventListener(){
+ //@Override
+ public void event(Object dest, Event event)
+ {
+ graph.getEventManager().notifyEvent( graph , GraphEvents.finishRead ) ;
+ }
+ } ;
+ EventManager.register(this, startRead, el1) ;
+ EventManager.register(this, finishRead, el2) ;
}
- //@Override
public void send(Triple triple)
{
graph.add(triple) ;
}
+
+ //@Override
+ public void flush() { SystemARQ.sync(graph) ; }
+
+ //@Override
+ public void close()
+ {
+ EventManager.unregister(this, finishRead, el2) ;
+ EventManager.unregister(this, startRead, el1) ;
+ }
+
+
+
}
/*