mirror of
https://github.com/github/codeql.git
synced 2026-04-25 08:45:14 +02:00
Java: handle lock state check stored in variable
This commit is contained in:
@@ -3,3 +3,4 @@
|
||||
| UnreleasedLock.java:40:3:40:15 | lock(...) | This lock might not be unlocked or might be locked more times than it is unlocked. |
|
||||
| UnreleasedLock.java:50:3:50:15 | lock(...) | This lock might not be unlocked or might be locked more times than it is unlocked. |
|
||||
| UnreleasedLock.java:72:8:72:23 | tryLock(...) | This lock might not be unlocked or might be locked more times than it is unlocked. |
|
||||
| UnreleasedLock.java:114:13:114:28 | tryLock(...) | This lock might not be unlocked or might be locked more times than it is unlocked. |
|
||||
|
||||
@@ -5,18 +5,18 @@ class Test {
|
||||
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 {
|
||||
@@ -25,7 +25,7 @@ class Test {
|
||||
mylock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void bad3() {
|
||||
mylock.lock();
|
||||
f();
|
||||
@@ -35,7 +35,7 @@ class Test {
|
||||
mylock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void bad4() {
|
||||
mylock.lock();
|
||||
try {
|
||||
@@ -45,7 +45,7 @@ class Test {
|
||||
mylock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void bad5(boolean lockmore) {
|
||||
mylock.lock();
|
||||
try {
|
||||
@@ -58,7 +58,7 @@ class Test {
|
||||
mylock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void good6() {
|
||||
if (!mylock.tryLock()) { return; }
|
||||
try {
|
||||
@@ -67,7 +67,7 @@ class Test {
|
||||
mylock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void bad7() {
|
||||
if (!mylock.tryLock()) { return; }
|
||||
f();
|
||||
@@ -95,4 +95,29 @@ class Test {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user