/* * * Date By Description * MM/DD/YYYY * ---------- -- ----------- * 11/17/2003 INB Ensure that <code>InteruptedExceptions</code> do not * keep the <code>Lock</code> from being cleared. Clear * the <code>Thread</code> from the <code>Lock</code>. * 02/21/2001 INB Created. * */ private final void unlockReadWrite() throws java.lang.InterruptedException { java.lang.InterruptedException interruptedException = null; boolean grabbed = false; try { // Grab the primary lock. while (!grabbed) { try { getPrimaryLock().grab("", false, false); grabbed = true; } catch (java.lang.InterruptedException e) { // Clear any interruptions and retry the grab. interruptedException = e; com.rbnb.compat.Utilities.interrupted(Thread.currentThread()); } } // Clear the primary lock. getPrimaryLock().unlock(); } finally { // Release the primary lock. if (grabbed) { synchronized (getPrimaryLock()) { getPrimaryLock().release(); if (getPrimaryLock().count == 0) { getPrimaryLock().setThread(null); } } } // Throw the <code>InterruptedException</code> if one happened. if (interruptedException != null) { throw interruptedException; } } }
/* * * Date By Description * MM/DD/YYYY * ---------- -- ----------- * 04/28/2004 INB Created. * */ public AddressPermissions(String stringI) throws java.lang.Exception { super(); int eql = stringI.indexOf("="); if (eql == -1) { // If there is no equals (=), then the entire thing is the // address. setAddress(stringI); } else if (eql == 0) { // No actual address was provided. throw new java.lang.IllegalArgumentException("No address provided in " + stringI); } else { // Otherwise, we have permissions as well as an address. String permString = stringI.substring(eql + 1); if (permString.length() == 0) { // If there are no permissions provided, then that's an // error. throw new java.lang.IllegalArgumentException( "No permissions provided with address " + "epecification " + stringI); } // Turn on the appropriate permissions bits. setPermissions(0x00); char permChar; int idx1; for (int idx = 0; idx < permString.length(); ++idx) { // Determine which permission is being granted by each // character in the permissions string. permChar = permString.charAt(idx); // Find the matching access character. for (idx1 = 0; idx1 < ACCESS_VALUES.length; ++idx1) { if (permChar == ACCESS_VALUES[idx1]) { break; } } if (idx1 == ACCESS_VALUES.length) { // No matching character was found, throw an exception. throw new java.lang.IllegalArgumentException( "Unrecognized permission access character in " + stringI); } // Set the corresponding bit. setPermissions(getPermissions() | (0x01 << idx1)); } // Set the address. setAddress(stringI.substring(0, eql)); } if (getAddress().equals("*")) { // If this is the default wildcard address, then use the // default wildcard. setWildcard(AddressAuthorization.Wildcard); } else if (getAddress().equalsIgnoreCase("localhost")) { // If the address is localhost, then map it to the actual localhost // address. if (Localhost == null) { Localhost = TCP.buildAddress("localhost"); Localhost = Localhost.substring(6, com.rbnb.compat.Utilities.lastIndexOf(Localhost, ":")); Localhost_Wildcard = new com.rbnb.utility.Wildcards(Localhost); } setAddress(Localhost); setWildcard(Localhost_Wildcard); } else { // Otherwise, create a new wildcard. setWildcard(new com.rbnb.utility.Wildcards(getAddress())); } }