Skip to content

Commit 44809fd

Browse files
committed
GH-3572 allow concurrent reads and writes against the WeakObjectRegistry
Signed-off-by: Håvard Ottestad <hmottestad@gmail.com>
1 parent afd8b18 commit 44809fd

File tree

7 files changed

+348
-106
lines changed

7 files changed

+348
-106
lines changed

core/rio/turtle/src/main/java/org/eclipse/rdf4j/rio/turtle/TurtleParser.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -278,12 +278,11 @@ protected void parsePrefixID() throws IOException, RDFParseException, RDFHandler
278278
skipWSC();
279279

280280
// Read the namespace URI
281-
IRI namespace = parseURI();
281+
String namespaceStr = parseURI().toString();
282282

283-
// Store and report this namespace mapping
284283
String prefixStr = prefixID.toString();
285-
String namespaceStr = namespace.toString();
286284

285+
// Store and report this namespace mapping
287286
setNamespace(prefixStr, namespaceStr);
288287

289288
if (rdfHandler != null) {

core/sail/memory/src/main/java/org/eclipse/rdf4j/sail/memory/MemorySailStore.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import org.eclipse.rdf4j.sail.base.SailSink;
4141
import org.eclipse.rdf4j.sail.base.SailSource;
4242
import org.eclipse.rdf4j.sail.base.SailStore;
43+
import org.eclipse.rdf4j.sail.memory.model.CloseableIterator;
44+
import org.eclipse.rdf4j.sail.memory.model.MemBNode;
4345
import org.eclipse.rdf4j.sail.memory.model.MemIRI;
4446
import org.eclipse.rdf4j.sail.memory.model.MemResource;
4547
import org.eclipse.rdf4j.sail.memory.model.MemStatement;
@@ -782,20 +784,25 @@ public CloseableIteration<? extends Resource, SailException> getContextIDs() thr
782784

783785
Lock stLock = openStatementsReadLock();
784786
try {
785-
synchronized (valueFactory) {
786-
int snapshot = getCurrentSnapshot();
787-
for (MemResource memResource : valueFactory.getMemURIs()) {
787+
int snapshot = getCurrentSnapshot();
788+
try (CloseableIterator<MemIRI> memIRIsIterator = valueFactory.getMemIRIsIterator()) {
789+
while (memIRIsIterator.hasNext()) {
790+
MemResource memResource = memIRIsIterator.next();
788791
if (isContextResource(memResource, snapshot)) {
789792
contextIDs.add(memResource);
790793
}
791794
}
795+
}
792796

793-
for (MemResource memResource : valueFactory.getMemBNodes()) {
797+
try (CloseableIterator<MemBNode> memBNodesIterator = valueFactory.getMemBNodesIterator()) {
798+
while (memBNodesIterator.hasNext()) {
799+
MemResource memResource = memBNodesIterator.next();
794800
if (isContextResource(memResource, snapshot)) {
795801
contextIDs.add(memResource);
796802
}
797803
}
798804
}
805+
799806
} finally {
800807
stLock.release();
801808
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2022 Eclipse RDF4J contributors.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Distribution License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/org/documents/edl-v10.php.
7+
******************************************************************************/
8+
9+
package org.eclipse.rdf4j.sail.memory.model;
10+
11+
import java.util.Iterator;
12+
13+
public interface CloseableIterator<E> extends Iterator<E>, AutoCloseable {
14+
15+
@Override
16+
void close();
17+
}

core/sail/memory/src/main/java/org/eclipse/rdf4j/sail/memory/model/MemIRI.java

+5
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ public MemIRI(Object creator, String namespace, String localName) {
7676
this.creator = creator;
7777
this.namespace = namespace;
7878
this.localName = localName;
79+
assert namespace != null;
80+
assert localName != null;
81+
if (namespace == null || localName == null) {
82+
System.out.println("HERE: " + namespace + " : " + localName);
83+
}
7984
}
8085

8186
/*---------*

0 commit comments

Comments
 (0)