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)