[deadlock] regression tests

Reviewed By: sblackshear

Differential Revision: D7238932

fbshipit-source-id: 923e18e
master
Nikos Gorogiannis 7 years ago committed by Facebook Github Bot
parent fe43dc2080
commit 484480f72f

@ -89,7 +89,7 @@ BUILD_SYSTEMS_TESTS += \
DIRECT_TESTS += \
java_checkers java_eradicate java_infer java_lab java_tracing java_quandary \
java_racerd java_stability java_crashcontext
java_racerd java_stability java_crashcontext java_deadlock
ifneq ($(ANT),no)
BUILD_SYSTEMS_TESTS += ant
endif

@ -0,0 +1,44 @@
/*
* Copyright (c) 2018 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
class Interclass {
synchronized void interclass1_bad(InterclassA a) {
a.interclass1_bad();
}
synchronized void interclass2_bad() {}
synchronized void interclass1_ok(InterclassB b) {
b.interclass1_ok();
}
void interclass2_ok(InterclassB b) {
synchronized(b) {}
}
void reentrant_ok(InterclassB b) {
synchronized(this) { synchronized(b) { b.interclass1_ok(); } }
}
}
class InterclassA {
synchronized void interclass1_bad() {}
synchronized void interclass2_bad(Interclass i) {
i.interclass2_bad();
}
}
class InterclassB {
synchronized void interclass1_ok() {}
void interclass2_ok(Interclass c) {
synchronized(c) { c.interclass2_ok(this); }
}
}

@ -0,0 +1,50 @@
/*
* Copyright (c) 2018 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
class Interproc {
synchronized void interproc1_bad(InterprocA a) {
interproc2_bad(a);
}
void interproc2_bad(InterprocA b) {
synchronized(b) {}
}
synchronized void interproc1_ok(InterprocB a) {
interproc2_ok(a);
}
void interproc2_ok(InterprocB b) {
synchronized(b) {}
}
void reentrant1_ok(InterprocB b) {
synchronized(this) { synchronized(b) { reentrant2_ok(); } }
}
synchronized void reentrant2_ok() {}
}
class InterprocA {
synchronized void interproc1_bad(Interproc c) {
interproc2_bad(c);
}
void interproc2_bad(Interproc d) {
synchronized(d) {}
}
}
class InterprocB {
void interproc1_ok(Interproc c) {
synchronized(c) { interproc2_ok(c); }
}
synchronized void interproc2_ok(Interproc d) {}
}

@ -0,0 +1,34 @@
/*
* Copyright (c) 2018 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
class Intraproc {
void intra_bad(IntraprocA o) {
synchronized(this) { synchronized(o) {} }
}
void intra_ok(IntraprocB o) {
synchronized(this) { synchronized(o) {} }
}
void reentrant_ok(IntraprocB b) {
synchronized(this) { synchronized(b) { synchronized(this) {} } }
}
}
class IntraprocA {
void intra_bad(Intraproc o) {
synchronized(this) { synchronized(o) {} }
}
}
class IntraprocB {
void intra_ok(Intraproc o) {
synchronized(o) { synchronized(this) {} }
}
}

@ -0,0 +1,15 @@
# Copyright (c) 2018 - present Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the BSD style license found in the
# LICENSE file in the root directory of this source tree. An additional grant
# of patent rights can be found in the PATENTS file in the same directory.
TESTS_DIR = ../../..
ANALYZER = checkers
INFER_OPTIONS = --deadlock-only --debug-exceptions
INFERPRINT_OPTIONS = --issues-tests
SOURCES = $(wildcard *.java)
include $(TESTS_DIR)/javac.make

@ -0,0 +1,3 @@
codetoanalyze/java/deadlock/Interclass.java, void Interclass.interclass1_bad(InterclassA), 0, DEADLOCK, ERROR, [[Trace 1] Lock acquisition: locks &this in class Interclass*,Method call: void InterclassA.interclass1_bad(),Lock acquisition: locks &this in class InterclassA*,[Trace 2] Lock acquisition: locks &this in class InterclassA*,Method call: void Interclass.interclass2_bad(),Lock acquisition: locks &this in class Interclass*]
codetoanalyze/java/deadlock/Interproc.java, void Interproc.interproc1_bad(InterprocA), 0, DEADLOCK, ERROR, [[Trace 1] Lock acquisition: locks &this in class Interproc*,Method call: void Interproc.interproc2_bad(InterprocA),Lock acquisition: locks &b in class InterprocA*,[Trace 2] Lock acquisition: locks &this in class InterprocA*,Method call: void InterprocA.interproc2_bad(Interproc),Lock acquisition: locks &d in class Interproc*]
codetoanalyze/java/deadlock/Intraproc.java, void IntraprocA.intra_bad(Intraproc), 0, DEADLOCK, ERROR, [[Trace 1] Method start: void IntraprocA.intra_bad(Intraproc),Lock acquisition: locks &this in class IntraprocA*,Lock acquisition: locks &o in class Intraproc*,[Trace 2] Method start: void Intraproc.intra_bad(IntraprocA),Lock acquisition: locks &this in class Intraproc*,Lock acquisition: locks &o in class IntraprocA*]
Loading…
Cancel
Save