The version of Apache log4j used by SoundHelix.
Clone
HTTPS:
git clone https://vervis.peers.community/repos/aEp6o
SSH:
git clone USERNAME@vervis.peers.community:aEp6o
Branches
Tags
- 1.3alpha-7
- CHAINSAW_2_SANDBOX_MERGE
- CORE_VERSION
- LEVEL_REPLACES_PRIORITY
- PREALPHA_1_3_AS_OF_2004_05_12
- PRE_CHAINSAW_MODEL_CONVERSION
- PRE_UGLI_MOVE
- TAG_CHAINSAW2_MOVE
- log4j-1.2.17
- log4j-1.2.17-rc1
- v1.3alpha8
- v1.3alpha8-temp
- v1_2_1
- v1_2_10-recalled
- v1_2_11
- v1_2_11_rc1
- v1_2_11rc3
- v1_2_12
- v1_2_12_rc1
- v1_2_12_rc2
- v1_2_12_rc3
- v1_2_12_rc4
- v1_2_12_rc5
- v1_2_12_rc6
- v1_2_13
- v1_2_13_rc1
- v1_2_13_rc2
- v1_2_13_site_update
- v1_2_14
- v1_2_14_maven
- v1_2_14_rc1
- v1_2_14_site_update
- v1_2_15
- v1_2_15_rc1
- v1_2_15_rc2
- v1_2_15_rc3
- v1_2_15_rc4
- v1_2_15_rc5
- v1_2_15_rc6
- v1_2_16
- v1_2_16_rc1
- v1_2_16_rc2
- v1_2_17
- v1_2_17-rc1
- v1_2_17_rc1
- v1_2_17_rc2
- v1_2_17_rc3
- v1_2_2
- v1_2_3
- v1_2_4
- v1_2_6
- v1_2_7
- v1_2_9
- v1_2_alpha0
- v1_2_alpha7
- v1_2beta1
- v1_2final
- v1_3alpha_1
- v1_3alpha_6
- v_1_0
- v_1_0_1
- v_1_0_4
- v_1_1
- v_1_1_1
- v_1_1_2
- v_1_1_3
- v_1_1_b1
- v_1_1b2
- v_1_1b3
- v_1_1b5
- v_1_1b6
- v_1_1b7
- v_1_2beta3
VerifierThread.java
/*
* Copyright 1999,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.log4j.helpers;
import org.apache.oro.text.perl.Perl5Util;
import java.io.BufferedReader;
import java.io.IOException;
/**
* This thread knows about the number of reader and writer threads and keeps
* track of their operations.
*
* @author Ceki Gülcü
*
*/
class VerifierThread extends Thread {
int writeLockHolder = -1;
boolean[] readLockHolders;
boolean[] readLockWaiters;
boolean[] writerLockWaiters;
BufferedReader bufferedReader;
double v1 = 0;
double v2 = 0;
Perl5Util regex;
Exception exception;
boolean closed;
VerifierThread(BufferedReader br, int numberOfReaders, int numberOfWriters) {
bufferedReader = br;
readLockHolders = new boolean[numberOfReaders];
readLockWaiters = new boolean[numberOfReaders];
writerLockWaiters = new boolean[numberOfWriters];
regex = new Perl5Util();
}
boolean isClosed() {
return closed;
}
public void run() {
System.out.println("In run of VerifThread");
String line = null;
while (!closed) {
try {
line = bufferedReader.readLine();
if(!closed) {
System.out.println(line);
}
if (regex.match("/([RW])-(\\d{1,3}) (.*)/", line)) {
String type = regex.group(1);
int num = Integer.parseInt(regex.group(2));
String msg = regex.group(3);
//System.out.println(type +"_"+num+ " "+msg);
if (type.equals("R")) {
readerMsg(num, msg);
} else if (type.equals("W")) {
writerMsg(num, msg);
}
} else {
System.out.println(
"[" + line + "] does not match expected pattern.");
}
} catch(IOException ioe) {
System.err.println("IOException occured.");
ioe.printStackTrace(System.err);
}catch (Exception e) {
if(exception == null) {
exception = e;
}
closed = true;
System.out.println("====Offending line ["+line+"].");
e.printStackTrace(System.out);
}
}
}
public Exception getException() {
return exception;
}
void readerMsg(int num, String msg) {
if (msg.equals("Asking for read lock.")) {
askReadLock(num);
} else if (msg.equals("Got read lock.")) {
gotReadLock(num);
} else if (msg.startsWith("Value1")) {
value1Message(num, msg);
} else if (msg.startsWith("Value2")) {
value2Message(num, msg);
} else if (msg.equals("About to release read lock.")) {
releaseReadLock(num);
}
}
void writerMsg(int num, String msg) {
if (msg.equals("Asking for write lock.")) {
askWriterLock(num);
} else if (msg.equals("Got write lock.")) {
gotWriteLock(num);
} else if (msg.equals("About to increment values.")) {
v1 += 1;
v2 += 10.0;
} else if (msg.equals("About to release write lock.")) {
releaseWriteLock(num);
}
}
boolean writerHoldsLock() {
return writeLockHolder != -1;
}
boolean writerIsWaiting() {
for (int i = 0; i < writerLockWaiters.length; i++) {
if (writerLockWaiters[i]) {
return true;
}
}
return false;
}
void askReadLock(int num) {
readLockWaiters[num] = true;
}
void askWriterLock(int num) {
writerLockWaiters[num] = true;
}
void gotReadLock(int num) {
if (!readLockWaiters[num]) {
throw new IllegalStateException(
"Reader " + num + " got a lock without asking.");
}
if (writerHoldsLock()) {
throw new IllegalStateException(
"Reader " + num + " got a lock while a writer had it.");
}
if (writerIsWaiting()) {
throw new IllegalStateException(
"Reader " + num + " got a lock while a writers were waiting.");
}
readLockWaiters[num] = false;
readLockHolders[num] = true;
}
void gotWriteLock(int num) {
if (!writerLockWaiters[num]) {
throw new IllegalStateException(
"Writer " + num + " got a lock without asking.");
}
if (writerHoldsLock()) {
throw new IllegalStateException(
"Writer " + num + " got a lock while a writer had it.");
}
writerLockWaiters[num] = false;
writeLockHolder = num;
}
void releaseReadLock(int num) {
if (readLockWaiters[num]) {
throw new IllegalStateException(
"Reader " + num + " released a lock while waiting for it.");
}
if (writerHoldsLock()) {
throw new IllegalStateException(
"Reader " + num + " released a lock while a writer had it.");
}
readLockHolders[num] = false;
}
void releaseWriteLock(int num) {
if (writerLockWaiters[num]) {
throw new IllegalStateException(
"Writer " + num + " released a lock while waiting for it.");
}
writeLockHolder = -1;
}
void value1Message(int num, String msg) {
if (regex.match("/Value1 is (\\d*)/", msg)) {
double r = Double.parseDouble(regex.group(1));
if (r != v1) {
throw new IllegalStateException(
"Reported value is " + r + " was expecting " + v1);
}
}
}
void value2Message(int num, String msg) {
if (regex.match("/Value1 is (\\d*)/", msg)) {
double r = Double.parseDouble(regex.group(1));
if (r != v2) {
throw new IllegalStateException(
"Reported value is " + r + " was expecting " + v2);
}
}
}
}