Author: toad
Date: 2008-08-29 21:22:10 +0000 (Fri, 29 Aug 2008)
New Revision: 22216

Modified:
   branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
Log:
Flag to log an error when we try to decrement a 0. This will indicate that we 
are removing the same key twice, or removing a key which was never added.


Modified: branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java  
2008-08-29 14:10:52 UTC (rev 22215)
+++ branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java  
2008-08-29 21:22:10 UTC (rev 22216)
@@ -13,6 +13,13 @@
  * @author sdiz
  */
 public class CountingBloomFilter extends BloomFilter {
+       
+       private boolean warnOnRemoveFromEmpty;
+       
+       public void setWarnOnRemoveFromEmpty() {
+               warnOnRemoveFromEmpty = true;
+       }
+       
        /**
         * Constructor
         * 
@@ -77,6 +84,9 @@
                byte b = filter.get(offset / 4);
                byte v = (byte) ((b >>> offset % 4 * 2) & 3);

+               if (v == 0 && warnOnRemoveFromEmpty)
+                       Logger.error(this, "Unsetting bit but already unset - 
probable double remove, can cause false negatives, is very bad!", new 
Exception("error"));
+               
                if (v == 0 || v == 3)
                        return; // overflow / underflow



Reply via email to