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

Reply via email to