1 24 25 package com.mckoi.database; 26 27 import com.mckoi.debug.*; 28 29 37 38 public final class Lock { 39 40 44 public static final int READ = 0; 45 public static final int WRITE = 1; 46 47 50 private int type; 51 52 55 private LockingQueue queue; 56 57 61 private boolean was_checked; 62 63 66 private final DebugLogger debug; 67 68 72 Lock(int type, LockingQueue queue, DebugLogger logger) { 73 this.debug = logger; 74 this.type = type; 75 this.queue = queue; 76 was_checked = false; 77 queue.addLock(this); 78 } 79 80 83 int getType() { 84 return type; 85 } 86 87 90 String getTypeAsString() { 91 int type = getType(); 92 if (type == READ) { 93 return "READ"; 94 } 95 else { 96 return "WRITE"; 97 } 98 } 99 100 103 DataTable getTable() { 104 return queue.getTable(); 105 } 106 107 113 void release() { 114 queue.removeLock(this); 115 116 if (!was_checked) { 117 String table_name = queue.getTable().getTableName().toString(); 120 debug.write(Lvl.ERROR, this, 121 "Lock on table '" + getTable().getTableName() + 122 "' was released but never checked. " + toString()); 123 debug.writeException(new RuntimeException ("Lock Error Dump")); 124 } 125 } 130 131 144 void checkAccess(int access_type) { 145 if (access_type == WRITE && this.type != WRITE) { 146 throw new Error ( 147 "Access error on Lock: Tried to write to a non write lock."); 148 } 149 if (was_checked == false) { 150 queue.checkAccess(this); 151 was_checked = true; 152 } 155 } 156 157 public String toString() { 158 return "[Lock] type: " + getTypeAsString() + 159 " was_checked: " + was_checked; 160 } 161 162 } 163 | Popular Tags |