Author: j16sdiz
Date: 2009-01-01 11:19:23 +0000 (Thu, 01 Jan 2009)
New Revision: 24855
Modified:
trunk/plugins/XMLSpider/db/PerstRoot.java
Log:
finer locking
Modified: trunk/plugins/XMLSpider/db/PerstRoot.java
===================================================================
--- trunk/plugins/XMLSpider/db/PerstRoot.java 2009-01-01 10:43:08 UTC (rev
24854)
+++ trunk/plugins/XMLSpider/db/PerstRoot.java 2009-01-01 11:19:23 UTC (rev
24855)
@@ -44,7 +44,10 @@
return root;
}
- public synchronized Term getTermByWord(String word, boolean create) {
+ public Term getTermByWord(String word, boolean create) {
+ md5Term.exclusiveLock();
+ wordTerm.exclusiveLock();
+ try {
Term term = wordTerm.get(new Key(word));
if (create && term == null) {
@@ -55,39 +58,72 @@
}
return term;
+ } finally {
+ wordTerm.unlock();
+ md5Term.unlock();
+ }
}
- public synchronized Iterator<Term> getTermIterator() {
+ public Iterator<Term> getTermIterator() {
+ md5Term.sharedLock();
+ try {
return md5Term.iterator();
+ } finally {
+ md5Term.unlock();
+ }
}
- public synchronized List<Term> getTermList() {
+ public List<Term> getTermList() {
+ md5Term.sharedLock();
+ try {
return md5Term.getList(null, null);
+ } finally {
+ md5Term.unlock();
+ }
}
- public synchronized int getTermCount() {
- return md5Term.size();
+ public int getTermCount() {
+ md5Term.sharedLock();
+ try {
+ return md5Term.size();
+ } finally {
+ md5Term.unlock();
+ }
}
-
- public synchronized Page getPageByURI(FreenetURI uri, boolean create,
String comment) {
- Page page = uriPage.get(new Key(uri.toString()));
- if (create && page == null) {
- page = new Page(uri.toString(), comment, getStorage());
+ public Page getPageByURI(FreenetURI uri, boolean create, String
comment) {
+ idPage.exclusiveLock();
+ uriPage.exclusiveLock();
+ queuedPages.exclusiveLock();
+ try {
+ Page page = uriPage.get(new Key(uri.toString()));
- idPage.append(page);
- uriPage.put(page);
- queuedPages.put(page);
+ if (create && page == null) {
+ page = new Page(uri.toString(), comment,
getStorage());
+
+ idPage.append(page);
+ uriPage.put(page);
+ queuedPages.put(page);
+ }
+
+ return page;
+ } finally {
+ queuedPages.unlock();
+ uriPage.unlock();
+ idPage.unlock();
}
-
- return page;
}
public Page getPageById(long id) {
- Page page = idPage.get(id);
- return page;
+ idPage.sharedLock();
+ try {
+ Page page = idPage.get(id);
+ return page;
+ } finally {
+ idPage.unlock();
+ }
}
-
+
FieldIndex<Page> getPageIndex(Status status) {
switch (status) {
case FAILED:
@@ -101,20 +137,32 @@
}
}
- public synchronized Iterator<Page> getPages(Status status) {
- return getPageIndex(status).iterator();
+ public Iterator<Page> getPages(Status status) {
+ FieldIndex<Page> index = getPageIndex(status);
+ index.sharedLock();
+ try {
+ return index.iterator();
+ } finally {
+ index.unlock();
+ }
}
- public synchronized int getPageCount(Status status) {
- return getPageIndex(status).size();
+ public int getPageCount(Status status) {
+ FieldIndex<Page> index = getPageIndex(status);
+ index.sharedLock();
+ try {
+ return index.size();
+ } finally {
+ index.unlock();
+ }
}
- public void setConfig(Config config) {
+ public synchronized void setConfig(Config config) {
this.config = config;
modify();
}
- public Config getConfig() {
+ public synchronized Config getConfig() {
return config;
}
}
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs