From 9b85d8170f9b4b260270d9cb98d941a72e10926d Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 5 Mar 2021 10:45:26 +0100
Subject: [PATCH] Activate fixed DatabaseAccessManager

---
 .../caosdb/server/database/DatabaseAccessManager.java  | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java b/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java
index 196a9fb2..f12c78e3 100644
--- a/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java
+++ b/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java
@@ -26,6 +26,7 @@
 package org.caosdb.server.database;
 
 import java.util.concurrent.Semaphore;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.ReentrantLock;
 import org.caosdb.server.database.access.Access;
 import org.caosdb.server.database.access.AccessControlAccess;
@@ -56,7 +57,7 @@ import org.caosdb.server.utils.Releasable;
 class ReadAccessSemaphore extends Semaphore implements Releasable {
 
   private static final long serialVersionUID = 4384921156838881337L;
-  private int acquired = 0; // how many threads have read access
+  private AtomicInteger acquired = new AtomicInteger(0); // how many threads have read access
   Semaphore writersBlock =
       new Semaphore(1, true); // This semaphore is blocked as long as there are any
   // unreleased read permits.
@@ -73,10 +74,9 @@ class ReadAccessSemaphore extends Semaphore implements Releasable {
   @Override
   public void acquire() throws InterruptedException {
     super.acquire(); // Protect the next few lines
-    if (this.acquired == 0) {
+    if (this.acquired.getAndIncrement() == 0) {
       this.writersBlock.acquire();
     }
-    this.acquired++;
     super.release();
   }
 
@@ -87,9 +87,7 @@ class ReadAccessSemaphore extends Semaphore implements Releasable {
    */
   @Override
   public void release() {
-    this.acquired--;
-    if (this.acquired <= 0) { // Last permit: release
-      this.acquired = 0;
+    if (this.acquired.decrementAndGet() == 0) { // Last permit: release
       if (this.writersBlock.availablePermits() <= 0) {
         this.writersBlock.release();
       }
-- 
GitLab