mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
124 lines
1.6 KiB
Java
124 lines
1.6 KiB
Java
class Test {
|
|
static class MyLock {
|
|
void lock() throws RuntimeException { }
|
|
boolean tryLock() { return true; }
|
|
void unlock() { }
|
|
boolean isHeldByCurrentThread() { return true; }
|
|
}
|
|
|
|
void f() throws RuntimeException { }
|
|
void g() throws RuntimeException { }
|
|
|
|
MyLock mylock = new MyLock();
|
|
|
|
void bad1() {
|
|
mylock.lock();
|
|
f();
|
|
mylock.unlock();
|
|
}
|
|
|
|
void good2() {
|
|
mylock.lock();
|
|
try {
|
|
f();
|
|
} finally {
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
|
|
void bad3() {
|
|
mylock.lock();
|
|
f();
|
|
try {
|
|
g();
|
|
} finally {
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
|
|
void bad4() {
|
|
mylock.lock();
|
|
try {
|
|
f();
|
|
} finally {
|
|
g();
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
|
|
void bad5(boolean lockmore) {
|
|
mylock.lock();
|
|
try {
|
|
f();
|
|
if (lockmore) {
|
|
mylock.lock();
|
|
}
|
|
g();
|
|
} finally {
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
|
|
void good6() {
|
|
if (!mylock.tryLock()) { return; }
|
|
try {
|
|
f();
|
|
} finally {
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
|
|
void bad7() {
|
|
if (!mylock.tryLock()) { return; }
|
|
f();
|
|
mylock.unlock();
|
|
}
|
|
|
|
void good7() {
|
|
try {
|
|
if (mylock.tryLock()) {
|
|
return;
|
|
}
|
|
} finally {
|
|
if (mylock.isHeldByCurrentThread()) {
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
}
|
|
|
|
void good8() {
|
|
boolean locked = mylock.tryLock();
|
|
if (!locked) { return; }
|
|
try {
|
|
f();
|
|
} finally {
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
|
|
void good9() {
|
|
boolean locked = false;
|
|
try {
|
|
locked = mylock.tryLock();
|
|
if (!locked) { return; }
|
|
} finally {
|
|
if (locked) {
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
}
|
|
|
|
void bad10() {
|
|
boolean locked = false;
|
|
try {
|
|
locked = mylock.tryLock();
|
|
if (!locked) { return; }
|
|
} finally {
|
|
if (locked) {
|
|
g();
|
|
mylock.unlock();
|
|
}
|
|
}
|
|
}
|
|
}
|