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

Activate fixed DatabaseAccessManager

parent b2faf630
No related branches found
No related tags found
1 merge request!4f-fix-deadlock -> dev
Pipeline #5395 passed
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
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;
...@@ -56,7 +57,7 @@ import org.caosdb.server.utils.Releasable; ...@@ -56,7 +57,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 int acquired = 0; // how many threads have read access private AtomicInteger acquired = new AtomicInteger(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.
...@@ -73,10 +74,9 @@ class ReadAccessSemaphore extends Semaphore implements Releasable { ...@@ -73,10 +74,9 @@ 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 == 0) { if (this.acquired.getAndIncrement() == 0) {
this.writersBlock.acquire(); this.writersBlock.acquire();
} }
this.acquired++;
super.release(); super.release();
} }
...@@ -87,9 +87,7 @@ class ReadAccessSemaphore extends Semaphore implements Releasable { ...@@ -87,9 +87,7 @@ class ReadAccessSemaphore extends Semaphore implements Releasable {
*/ */
@Override @Override
public void release() { public void release() {
this.acquired--; if (this.acquired.decrementAndGet() == 0) { // Last permit: release
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