## Why is this an issue?

If a lock is acquired and released within a method, then it must be released along all execution paths of that method.

Failing to do so will expose the conditional locking logic to the method’s callers and hence be deadlock-prone.

### Noncompliant code example

    public class MyClass {
      public void doSomething() {
        Lock lock = new Lock();
        lock.lock(); // Noncompliant
        if (isInitialized()) {
          // ...
          lock.unlock();
        }
      }
    }

### Compliant solution

    public class MyClass {
      public void doSomething() {
        Lock lock = new Lock();
        if (isInitialized()) {
          lock.lock();
          // ...
          lock.unlock();
        }
      }
    }

## Resources

- CWE - CWE-459 - Incomplete Cleanup