Author: toad
Date: 2008-06-30 14:57:18 +0000 (Mon, 30 Jun 2008)
New Revision: 20876
Modified:
branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java
Log:
Activate all datums before doing binary search in SortedVectorByNumber.
OUCH. All testers *may* have data corruption, resulting in: "Verify failed! at
<num> this=<num> but last=<num>"
If you have this, delete your node.db4o and start again. :(
Modified: branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java
2008-06-30 14:52:52 UTC (rev 20875)
+++ branches/db4o/freenet/src/freenet/support/SortedVectorByNumber.java
2008-06-30 14:57:18 UTC (rev 20876)
@@ -40,8 +40,11 @@
}
public synchronized void remove(int item, ObjectContainer container) {
- if(persistent)
+ if(persistent) {
container.activate(this, 1);
+ for(int i=0;i<length;i++)
+ container.activate(data[i], 1);
+ }
int x = Arrays.binarySearch(data, new Integer(item),
comparator);
if(x >= 0) {
if(x < length-1)
@@ -79,8 +82,11 @@
* @return True if we added the item.
*/
public synchronized boolean push(IntNumberedItem grabber,
ObjectContainer container) {
- if(persistent)
+ if(persistent) {
container.activate(this, 1);
+ for(int i=0;i<length;i++)
+ container.activate(data[i], 1);
+ }
int x = Arrays.binarySearch(data, new
Integer(grabber.getNumber()), comparator);
if(x >= 0) return false;
// insertion point
@@ -90,8 +96,11 @@
}
public synchronized void add(IntNumberedItem grabber, ObjectContainer
container) {
- if(persistent)
+ if(persistent) {
container.activate(this, 1);
+ for(int i=0;i<length;i++)
+ container.activate(data[i], 1);
+ }
int x = Arrays.binarySearch(data, new
Integer(grabber.getNumber()), comparator);
if(x >= 0) {
if(grabber != data[x])
@@ -104,8 +113,11 @@
}
private synchronized void push(IntNumberedItem grabber, int x,
ObjectContainer container) {
- if(persistent)
+ if(persistent) {
container.activate(this, 1);
+ for(int i=0;i<length;i++)
+ container.activate(data[i], 1);
+ }
boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
if(logMINOR) Logger.minor(this, "Insertion point: "+x);
// Move the data