From 11937cb07656778478fec62eb984279aee44e9ae Mon Sep 17 00:00:00 2001 From: Peter O'Hearn Date: Mon, 13 Mar 2017 16:50:08 -0700 Subject: [PATCH] [infer][threadsafety] model tryLock() for java.util.concurrent.locks.Lock Summary: we were just missing this model, adding it Reviewed By: sblackshear Differential Revision: D4701435 fbshipit-source-id: 9718305 --- infer/src/checkers/ThreadSafety.ml | 5 ++--- infer/tests/codetoanalyze/java/threadsafety/Locks.java | 8 ++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/infer/src/checkers/ThreadSafety.ml b/infer/src/checkers/ThreadSafety.ml index 8f660a33b..8c3f29b9d 100644 --- a/infer/src/checkers/ThreadSafety.ml +++ b/infer/src/checkers/ThreadSafety.ml @@ -55,9 +55,8 @@ module TransferFunctions (CFG : ProcCfg.S) = struct | Typ.Procname.Java java_pname -> begin match Typ.Procname.java_get_class_name java_pname, Typ.Procname.java_get_method java_pname with - | "java.util.concurrent.locks.Lock", "lock" -> - Lock - | ("java.util.concurrent.locks.ReentrantLock" + | ("java.util.concurrent.locks.Lock" + | "java.util.concurrent.locks.ReentrantLock" | "java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock" | "java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock"), ("lock" | "tryLock" | "lockInterruptibly") -> diff --git a/infer/tests/codetoanalyze/java/threadsafety/Locks.java b/infer/tests/codetoanalyze/java/threadsafety/Locks.java index 9d4bddad5..74128472c 100644 --- a/infer/tests/codetoanalyze/java/threadsafety/Locks.java +++ b/infer/tests/codetoanalyze/java/threadsafety/Locks.java @@ -76,6 +76,13 @@ public class Locks { mReentrantLock.unlock(); } + public void normalLockTryLockOk() { + if (mLock.tryLock()) { + f = 42; + mLock.unlock(); + } + } + public void rReentrantLockTryLockOk() { if (mReentrantLock.tryLock()) { f = 42; @@ -83,6 +90,7 @@ public class Locks { } } + public void reentrantLockInterruptiblyOk() throws InterruptedException { mReentrantLock.lockInterruptibly(); f = 42;