diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/BTreeTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/BTreeTests.java index a05e76e02e5..e04ac4b3e46 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/BTreeTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/BTreeTests.java @@ -53,6 +53,7 @@ public class BTreeTests extends BaseTestCase { protected void init(int degree) throws Exception { dbFile = File.createTempFile("pdomtest", "db"); db = new Database(dbFile, new ChunkCache(), 0); + db.setWritable(); rootRecord = Database.DATA_AREA; comparator = new BTMockRecordComparator(); btree = new BTree(db, rootRecord, degree, comparator); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBPropertiesTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBPropertiesTests.java index 213eb2fa4cf..c5318015536 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBPropertiesTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBPropertiesTests.java @@ -38,6 +38,7 @@ public class DBPropertiesTests extends BaseTestCase { dbLoc = File.createTempFile("test", "db"); dbLoc.deleteOnExit(); db = new Database(dbLoc, new ChunkCache(), 0); + db.setWritable(); } protected void tearDown() throws Exception { @@ -45,6 +46,7 @@ public class DBPropertiesTests extends BaseTestCase { } public void testBasic() throws CoreException { + db.setWritable(); DBProperties properties = new DBProperties(db); Properties expected = System.getProperties(); for(Iterator i = expected.keySet().iterator(); i.hasNext(); ) { diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBTest.java index e35e8cb1ad4..a2b3b75ea67 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/DBTest.java @@ -127,6 +127,7 @@ public class DBTest extends BaseTestCase { File f = getTestDir().append("testStrings.dat").toFile(); f.delete(); final Database db = new Database(f, new ChunkCache(), 0); + db.setWritable(); String[] names = { "ARLENE", diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index 5bfb7a1fe8b..c94dc922957 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -249,6 +249,7 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM { } void reloadFromFile(File file) throws CoreException { + assert lockCount < 0; // must have write lock. File oldFile= fPath; fLinkageIDCache.clear(); try { @@ -257,6 +258,7 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM { CCorePlugin.log(e); } loadDatabase(file, db.getChunkCache()); + db.setWritable(); oldFile.delete(); } @@ -750,7 +752,7 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM { db.resetCacheCounters(); } - public void flush() throws CoreException { + protected void flush() throws CoreException { db.flush(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/WritablePDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/WritablePDOM.java index bdabb5ec383..0f95cc08e81 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/WritablePDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/WritablePDOM.java @@ -72,6 +72,10 @@ public class WritablePDOM extends PDOM implements IWritableIndexFragment { super.clear(); } + public void flush() throws CoreException { + super.flush(); + } + public PDOMBinding addBinding(IASTName name) throws CoreException { PDOMBinding result= null; PDOMLinkage linkage= createLinkage(name.getLinkage().getID()); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Chunk.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Chunk.java index fd90a1488d1..ef28bed112c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Chunk.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Chunk.java @@ -57,6 +57,7 @@ final class Chunk { } public void putByte(int offset, byte value) { + assert fLocked; fDirty= true; fBuffer.put(offset % Database.CHUNK_SIZE, value); } @@ -73,12 +74,14 @@ final class Chunk { } public void putBytes(int offset, byte[] bytes) { + assert fLocked; fDirty= true; fBuffer.position(offset % Database.CHUNK_SIZE); fBuffer.put(bytes, 0, bytes.length); } public void putInt(int offset, int value) { + assert fLocked; fDirty= true; fBuffer.putInt(offset % Database.CHUNK_SIZE, value); } @@ -88,6 +91,7 @@ final class Chunk { } public void putShort(int offset, short value) { + assert fLocked; fDirty= true; fBuffer.putShort(offset % Database.CHUNK_SIZE, value); } @@ -101,11 +105,13 @@ final class Chunk { } public void putLong(int offset, long value) { + assert fLocked; fDirty= true; fBuffer.putLong(offset % Database.CHUNK_SIZE, value); } public void putChar(int offset, char value) { + assert fLocked; fDirty= true; fBuffer.putChar(offset % Database.CHUNK_SIZE, value); } @@ -120,6 +126,7 @@ final class Chunk { } void clear(int offset, int length) { + assert fLocked; fDirty= true; fBuffer.position(offset % Database.CHUNK_SIZE); fBuffer.put(new byte[length]);