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)