/** Checks if a certain request from a given owner is already in the queue */ protected boolean isRequestPresent(Type type, Owner owner) { // holds lock on queue for(Request req: queue) if(req.type == type && req.owner.equals(owner)) return true; return false; }
protected void removeRequest(Type type, Owner owner) { synchronized(queue) { queue.removeIf(req -> req.type == type && req.owner.equals(owner)); } }
protected Response processQueue() { if(owner != null) return null; Request req; while((req=getNextRequest()) != null) { switch(req.type) { case GRANT_LOCK: setOwner(req.owner); return new Response(Type.LOCK_GRANTED, req.owner, req.lock_name, req.lock_id); case RELEASE_LOCK: if(owner == null) break; if(owner.equals(req.owner)) setOwner(null); return new Response(Type.RELEASE_LOCK_OK, req.owner, req.lock_name, req.lock_id); } } return null; }
return new Response(Type.LOCK_GRANTED, req.owner, req.lock_name, req.lock_id); if(owner.equals(req.owner)) return new Response(Type.LOCK_GRANTED, req.owner, req.lock_name, req.lock_id);
/** Checks if a certain request from a given owner is already in the queue */ protected boolean isRequestPresent(Type type, Owner owner) { // holds lock on queue for(Request req: queue) if(req.type == type && req.owner.equals(owner)) return true; return false; }
protected void removeRequest(Type type, Owner owner) { synchronized(queue) { queue.removeIf(req -> req.type == type && req.owner.equals(owner)); } }
protected Response processQueue() { if(owner != null) return null; Request req; while((req=getNextRequest()) != null) { switch(req.type) { case GRANT_LOCK: setOwner(req.owner); return new Response(Type.LOCK_GRANTED, req.owner, req.lock_name, req.lock_id); case RELEASE_LOCK: if(owner == null) break; if(owner.equals(req.owner)) setOwner(null); return new Response(Type.RELEASE_LOCK_OK, req.owner, req.lock_name, req.lock_id); } } return null; }
return new Response(Type.LOCK_GRANTED, req.owner, req.lock_name, req.lock_id); if(owner.equals(req.owner)) return new Response(Type.LOCK_GRANTED, req.owner, req.lock_name, req.lock_id);