summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-07-24 18:09:20 +0000
committerRich Hickey <richhickey@gmail.com>2007-07-24 18:09:20 +0000
commit099953cd4057aacf696de026baaee0295fc4db19 (patch)
tree4fe5a87b294da69ddf2406813f93838375d42061 /src
parentfc33cf217b1dbfaaee3ca3294a6785df5befdaa1 (diff)
made commit tpoint + commit atomic
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Transaction.java16
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);
}