vgritsenko    2003/12/18 18:35:06

  Modified:    java/src/org/apache/xindice/core/filer Paged.java
  Log:
  Fix syncrhonization issue when accessing fileHeader
  
  Revision  Changes    Path
  1.23      +17 -14    
xml-xindice/java/src/org/apache/xindice/core/filer/Paged.java
  
  Index: Paged.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xindice/java/src/org/apache/xindice/core/filer/Paged.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- Paged.java        18 Dec 2003 15:05:20 -0000      1.22
  +++ Paged.java        19 Dec 2003 02:35:06 -0000      1.23
  @@ -470,19 +470,22 @@
        */
       protected final Page getFreePage() throws IOException {
           Page p = null;
  -        long pageNum = fileHeader.firstFreePage;
  -        if (pageNum != NO_PAGE) {
  -            // Steal a deleted page
  -            // FIXME: Sync issue here
  -            p = getPage(pageNum);
  -            fileHeader.setFirstFreePage(p.getPageHeader().nextPage);
  -            if (fileHeader.firstFreePage == NO_PAGE) {
  -                fileHeader.setLastFreePage(NO_PAGE);
  +
  +        // Synchronize read and write to the fileHeader.firstFreePage
  +        synchronized (fileHeader) {
  +            if (fileHeader.firstFreePage != NO_PAGE) {
  +                // Steal a deleted page
  +                p = getPage(fileHeader.firstFreePage);
  +                fileHeader.setFirstFreePage(p.getPageHeader().nextPage);
  +                if (fileHeader.firstFreePage == NO_PAGE) {
  +                    fileHeader.setLastFreePage(NO_PAGE);
  +                }
               }
  -        } else {
  -            // Grow the file
  -            pageNum = fileHeader.incTotalCount();
  -            p = getPage(pageNum);
  +        }
  +
  +        if (p == null) {
  +            // No deleted pages, grow the file
  +            p = getPage(fileHeader.incTotalCount());
           }
   
           // Initialize The Page Header (Cleanly)
  
  
  

Reply via email to