From 5fea6cb52c8a5f6323f1744ad20dbaa66d92e6ba Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 20 Aug 2014 17:35:34 -0400 Subject: [PATCH] [FIXED JENKINS-24358] RunSaveableReference.get can acquire locks, so avoid calling it while holding a lock on ourselves. --- changelog.html | 3 +++ core/src/main/java/hudson/diagnosis/OldDataMonitor.java | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/changelog.html b/changelog.html index 9b55d39fb3..d8754a7fe4 100644 --- a/changelog.html +++ b/changelog.html @@ -58,6 +58,9 @@ Upcoming changes
  • Added 'no-store' to the 'Cache-Control' header to avoid accidental information leak through local cache backup (issue 24337) +
  • + Deadlock in OldDataMonitor. + (issue 24358) diff --git a/core/src/main/java/hudson/diagnosis/OldDataMonitor.java b/core/src/main/java/hudson/diagnosis/OldDataMonitor.java index b9e18d1b68..cb6e890e60 100644 --- a/core/src/main/java/hudson/diagnosis/OldDataMonitor.java +++ b/core/src/main/java/hudson/diagnosis/OldDataMonitor.java @@ -84,9 +84,13 @@ public class OldDataMonitor extends AdministrativeMonitor { return !data.isEmpty(); } - public synchronized Map getData() { + public Map getData() { + Map _data; + synchronized (this) { + _data = new HashMap(this.data); + } Map r = new HashMap(); - for (Map.Entry entry : data.entrySet()) { + for (Map.Entry entry : _data.entrySet()) { Saveable s = entry.getKey().get(); if (s != null) { r.put(s, entry.getValue()); -- GitLab