Ignore:
Timestamp:
2013-04-07T17:07:27+02:00 (13 years ago)
Author:
akks
Message:

JOSM/ImageryCache: updated MapDB (no more deadlocks, Java 1.6 compatible), less crashes, multiple-JOSM support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/imagerycache/src/org/mapdb/SnapshotEngine.java

    r29363 r29484  
    33import java.util.Map;
    44import java.util.concurrent.ConcurrentHashMap;
     5import java.util.concurrent.locks.ReentrantLock;
    56import java.util.concurrent.locks.ReentrantReadWriteLock;
    67
     
    1516public class SnapshotEngine extends EngineWrapper{
    1617
    17     protected final Locks.RecidLocks locks = new Locks.LongHashMapRecidLocks();
     18    protected final ReentrantLock[] locks =  Utils.newLocks(32);
    1819
    1920    protected final static Object NOT_EXIST = new Object();
     
    3839    public <A> long put(A value, Serializer<A> serializer) {
    3940        long recid = super.put(value, serializer);
    40         locks.lock(recid);
     41        Utils.lock(locks,recid);
    4142        try{
    4243            for(Snapshot s:snapshots.keySet()){
     
    4546            return recid;
    4647        }finally{
    47             locks.unlock(recid);
     48            Utils.unlock(locks,recid);
    4849        }
    4950    }
     
    5152    @Override
    5253    public <A> boolean compareAndSwap(long recid, A expectedOldValue, A newValue, Serializer<A> serializer) {
    53         locks.lock(recid);
     54        Utils.lock(locks,recid);
    5455        try{
    5556            boolean ret =  super.compareAndSwap(recid, expectedOldValue, newValue, serializer);
     
    6162            return ret;
    6263        }finally{
    63             locks.unlock(recid);
     64            Utils.unlock(locks,recid);
    6465        }
    6566    }
     
    6768    @Override
    6869    public <A> void update(long recid, A value, Serializer<A> serializer) {
    69         locks.lock(recid);
     70        Utils.lock(locks,recid);
    7071        try{
    7172            Object val = NOT_INIT_YET;
     
    8081            super.update(recid, value, serializer);
    8182        }finally{
    82             locks.unlock(recid);
     83            Utils.unlock(locks,recid);
    8384        }
    8485    }
     
    8687    @Override
    8788    public  <A> void delete(long recid, Serializer<A> serializer) {
    88         locks.lock(recid);
     89        Utils.lock(locks,recid);
    8990        try{
    9091            Object val = NOT_INIT_YET;
     
    99100            super.delete(recid,serializer);
    100101        }finally{
    101             locks.unlock(recid);
     102            Utils.unlock(locks,recid);
    102103        }
    103104    }
     
    131132        @Override
    132133        public <A> A get(long recid, Serializer<A> serializer) {
    133             locks.lock(recid);
     134            Utils.lock(locks,recid);
    134135            try{
    135136                Object ret = oldValues.get(recid);
     
    140141                return SnapshotEngine.this.getWrappedEngine().get(recid, serializer);
    141142            }finally{
    142                 locks.unlock(recid);
     143                Utils.unlock(locks,recid);
    143144            }
    144145        }
Note: See TracChangeset for help on using the changeset viewer.