From b2faf6300a1183613bdce54edf6a46cdaf9ed8f9 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Fri, 5 Mar 2021 10:44:27 +0100
Subject: [PATCH] Revert DatabaseAccessManager to buggy implementation

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

diff --git a/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java b/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java
index f12c78e3..196a9fb2 100644
--- a/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java
+++ b/src/main/java/org/caosdb/server/database/DatabaseAccessManager.java
@@ -26,7 +26,6 @@
 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;
@@ -57,7 +56,7 @@ import org.caosdb.server.utils.Releasable;
 class ReadAccessSemaphore extends Semaphore implements Releasable {
 
   private static final long serialVersionUID = 4384921156838881337L;
-  private AtomicInteger acquired = new AtomicInteger(0); // how many threads have read access
+  private int acquired = 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.
@@ -74,9 +73,10 @@ class ReadAccessSemaphore extends Semaphore implements Releasable {
   @Override
   public void acquire() throws InterruptedException {
     super.acquire(); // Protect the next few lines
-    if (this.acquired.getAndIncrement() == 0) {
+    if (this.acquired == 0) {
       this.writersBlock.acquire();
     }
+    this.acquired++;
     super.release();
   }
 
@@ -87,7 +87,9 @@ class ReadAccessSemaphore extends Semaphore implements Releasable {
    */
   @Override
   public void release() {
-    if (this.acquired.decrementAndGet() == 0) { // Last permit: release
+    this.acquired--;
+    if (this.acquired <= 0) { // Last permit: release
+      this.acquired = 0;
       if (this.writersBlock.availablePermits() <= 0) {
         this.writersBlock.release();
       }
-- 
GitLab