diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-07-24 18:09:20 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-07-24 18:09:20 +0000 |
commit | 099953cd4057aacf696de026baaee0295fc4db19 (patch) | |
tree | 4fe5a87b294da69ddf2406813f93838375d42061 | |
parent | fc33cf217b1dbfaaee3ca3294a6785df5befdaa1 (diff) |
made commit tpoint + commit atomic
-rw-r--r-- | src/jvm/clojure/lang/Transaction.java | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/jvm/clojure/lang/Transaction.java b/src/jvm/clojure/lang/Transaction.java index 14ca7fcc..90a1a402 100644 --- a/src/jvm/clojure/lang/Transaction.java +++ b/src/jvm/clojure/lang/Transaction.java @@ -34,10 +34,16 @@ static class AbortException extends Exception{ //total order on transactions //transactions will consume a point for init, for each retry, and on commit if writing -final static AtomicLong nextPoint = new AtomicLong(1); +final static Object tlock = new Object(); +static long nextPoint = 1; +//final static AtomicLong nextPoint = new AtomicLong(1); static long getNextPoint(){ - return nextPoint.getAndIncrement(); +// return nextPoint.getAndIncrement(); + synchronized(tlock) + { + return nextPoint++; + } } static class PointNode{ @@ -173,11 +179,11 @@ Object run(IFn fn) throws Exception{ done = true; //save the read point long readPoint = tstamp.tpoint; - //get a commit point and time, bundle with state transition - synchronized(tstamp) + tstamp.msecs = System.currentTimeMillis(); + //get a commit point + alter status, atomically + synchronized(tlock) { tstamp.tpoint = getNextPoint(); - tstamp.msecs = System.currentTimeMillis(); //commit! statusTransition(tstamp, TStamp.Status.COMMITTED); } |