On Sun, Jul 13, 2008 at 3:14 AM, Matthew Toseland
<toad at amphibian.dyndns.org> wrote:
> Would it make sense to return the Condition so we can check that we are
> unlocking from the actual owner of the lock?

okay.
fixed in r21131

>
> On Thursday 05 June 2008 16:32, j16sdiz at freenetproject.org wrote:
>> Author: j16sdiz
>> Date: 2008-06-05 15:32:00 +0000 (Thu, 05 Jun 2008)
>> New Revision: 20220
>>
>> Modified:
>>
> branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
>> Log:
>> lock old offsets only on fetch()
>>
>>
>> Modified:
> branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
>> ===================================================================
>> ---
> branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
> 2008-06-05 15:31:35 UTC (rev 20219)
>> +++
> branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
> 2008-06-05 15:32:00 UTC (rev 20220)
>> @@ -119,7 +119,7 @@
>>
>>               configLock.readLock().lock();
>>               try {
>> -                     boolean locked = lockPlainKey(routingKey);
>> +                     boolean locked = lockPlainKey(routingKey, true);
>>                       if (!locked) {
>>                               if (logDEBUG)
>>                                       Logger.debug(this, "cannot lock key: " 
>> +
> HexUtil.bytesToHex(routingKey) + ", shutting down?");
>> @@ -145,7 +145,7 @@
>>                                       return null;
>>                               }
>>                       } finally {
>> -                             unlockPlainKey(routingKey);
>> +                             unlockPlainKey(routingKey, true);
>>                       }
>>               } finally {
>>                       configLock.readLock().unlock();
>> @@ -203,7 +203,7 @@
>>
>>               configLock.readLock().lock();
>>               try {
>> -                     boolean locked = lockPlainKey(routingKey);
>> +                     boolean locked = lockPlainKey(routingKey, false);
>>                       if (!locked) {
>>                               if (logDEBUG)
>>                                       Logger.debug(this, "cannot lock key: " 
>> +
> HexUtil.bytesToHex(routingKey) + ", shutting down?");
>> @@ -259,7 +259,7 @@
>>                               writeEntry(entry, offset[0]);
>>                               writes.incrementAndGet();
>>                       } finally {
>> -                             unlockPlainKey(routingKey);
>> +                             unlockPlainKey(routingKey, false);
>>                       }
>>               } finally {
>>                       configLock.readLock().unlock();
>> @@ -1221,12 +1221,12 @@
>>        * @param plainKey
>>        * @return <code>true</code> if all the offsets are locked.
>>        */
>> -     private boolean lockPlainKey(byte[] plainKey) {
>> -             return lockDigestedKey(getDigestedRoutingKey(plainKey));
>> +     private boolean lockPlainKey(byte[] plainKey, boolean 
>> usePrevStoreSize) {
>> +             return lockDigestedKey(getDigestedRoutingKey(plainKey),
> usePrevStoreSize);
>>       }
>>
>> -     private void unlockPlainKey(byte[] plainKey) {
>> -             unlockDigestedKey(getDigestedRoutingKey(plainKey));
>> +     private void unlockPlainKey(byte[] plainKey, boolean usePrevStoreSize) 
>> {
>> +             unlockDigestedKey(getDigestedRoutingKey(plainKey), 
>> usePrevStoreSize);
>>       }
>>
>>       /**
>> @@ -1236,14 +1236,14 @@
>>        * @param digestedKey
>>        * @return <code>true</code> if all the offsets are locked.
>>        */
>> -     private boolean lockDigestedKey(byte[] digestedKey) {
>> +     private boolean lockDigestedKey(byte[] digestedKey, boolean
> usePrevStoreSize) {
>>               // use a set to prevent duplicated offsets,
>>               // a sorted set to prevent deadlocks
>>               SortedSet<Long> offsets = new TreeSet<Long>();
>>               long[] offsetArray = getOffsetFromDigestedKey(digestedKey, 
>> storeSize);
>>               for (long offset : offsetArray)
>>                       offsets.add(offset);
>> -             if (prevStoreSize != 0) {
>> +             if (usePrevStoreSize && prevStoreSize != 0) {
>>                       offsetArray = getOffsetFromDigestedKey(digestedKey, 
>> prevStoreSize);
>>                       for (long offset : offsetArray)
>>                               offsets.add(offset);
>> @@ -1267,13 +1267,13 @@
>>               }
>>       }
>>
>> -     private void unlockDigestedKey(byte[] digestedKey) {
>> +     private void unlockDigestedKey(byte[] digestedKey, boolean
> usePrevStoreSize) {
>>               // use a set to prevent duplicated offsets
>>               SortedSet<Long> offsets = new TreeSet<Long>();
>>               long[] offsetArray = getOffsetFromDigestedKey(digestedKey, 
>> storeSize);
>>               for (long offset : offsetArray)
>>                       offsets.add(offset);
>> -             if (prevStoreSize != 0) {
>> +             if (usePrevStoreSize && prevStoreSize != 0) {
>>                       offsetArray = getOffsetFromDigestedKey(digestedKey, 
>> prevStoreSize);
>>                       for (long offset : offsetArray)
>>                               offsets.add(offset);
>
> _______________________________________________
> Devl mailing list
> Devl at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
>

Reply via email to