Skip to content
Snippets Groups Projects
Verified Commit b2faf630 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

Revert DatabaseAccessManager to buggy implementation

parent 7f4e421b
No related branches found
No related tags found
1 merge request!4f-fix-deadlock -> dev
Pipeline #5392 failed
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
package org.caosdb.server.database; package org.caosdb.server.database;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import org.caosdb.server.database.access.Access; import org.caosdb.server.database.access.Access;
import org.caosdb.server.database.access.AccessControlAccess; import org.caosdb.server.database.access.AccessControlAccess;
...@@ -57,7 +56,7 @@ import org.caosdb.server.utils.Releasable; ...@@ -57,7 +56,7 @@ import org.caosdb.server.utils.Releasable;
class ReadAccessSemaphore extends Semaphore implements Releasable { class ReadAccessSemaphore extends Semaphore implements Releasable {
private static final long serialVersionUID = 4384921156838881337L; 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 = Semaphore writersBlock =
new Semaphore(1, true); // This semaphore is blocked as long as there are any new Semaphore(1, true); // This semaphore is blocked as long as there are any
// unreleased read permits. // unreleased read permits.
...@@ -74,9 +73,10 @@ class ReadAccessSemaphore extends Semaphore implements Releasable { ...@@ -74,9 +73,10 @@ class ReadAccessSemaphore extends Semaphore implements Releasable {
@Override @Override
public void acquire() throws InterruptedException { public void acquire() throws InterruptedException {
super.acquire(); // Protect the next few lines super.acquire(); // Protect the next few lines
if (this.acquired.getAndIncrement() == 0) { if (this.acquired == 0) {
this.writersBlock.acquire(); this.writersBlock.acquire();
} }
this.acquired++;
super.release(); super.release();
} }
...@@ -87,7 +87,9 @@ class ReadAccessSemaphore extends Semaphore implements Releasable { ...@@ -87,7 +87,9 @@ class ReadAccessSemaphore extends Semaphore implements Releasable {
*/ */
@Override @Override
public void release() { 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) { if (this.writersBlock.availablePermits() <= 0) {
this.writersBlock.release(); this.writersBlock.release();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment