From dfba34c8a547503a263912365e3e45001d00793f Mon Sep 17 00:00:00 2001 From: "seokgil.kang" Date: Thu, 18 Dec 2014 12:26:09 +0900 Subject: [PATCH] Summary : modify data structure for thread safety in the leak table. (HashMap --> ConcurrentHashMap) Change-Id: I7726636b09ce98f17a58f3f2175e32dda2e47bbb Signed-off-by: seokgil.kang --- .../ui/summary/leaks/LeakDataMaker.java | 5 ++--- .../dynamicanalyzer/ui/summary/leaks/LeakTable.java | 4 ++-- .../ui/summary/leaks/NewLeakDetector.java | 20 +++++++++----------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDataMaker.java index 5b68ceb..c3c0bc3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDataMaker.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDataMaker.java @@ -29,8 +29,8 @@ package org.tizen.dynamicanalyzer.ui.summary.leaks; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Map; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.DALimit; @@ -40,7 +40,6 @@ import org.tizen.dynamicanalyzer.database.DBTable; import org.tizen.dynamicanalyzer.database.IResultSet; import org.tizen.dynamicanalyzer.logparser.LogCenterConstants; import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants; -import org.tizen.dynamicanalyzer.swap.model.data.FileData; import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.swap.model.data.MemoryData; import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager; @@ -106,7 +105,7 @@ public class LeakDataMaker { } public void makeData() { - HashMap leaks = leakDetector.getLeakHash(); + Map leaks = leakDetector.getLeakHash(); for (Integer key : leaks.keySet()) { makeLeakData(leaks.get(key)); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakTable.java index d7ba602..0d79849 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakTable.java @@ -28,8 +28,8 @@ package org.tizen.dynamicanalyzer.ui.summary.leaks; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Map; import org.eclipse.nebula.widgets.grid.GridItem; import org.eclipse.swt.SWT; @@ -156,7 +156,7 @@ public class LeakTable extends DATreeComposite { @Override public List makeTreeInput() { List output = new ArrayList(); - HashMap leaks = null; + Map leaks = null; List> leakDataList = null; // TODO : make hashkey (LogData.getKey() --> combination of pid and // address) diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/NewLeakDetector.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/NewLeakDetector.java index 0990df9..41d3d45 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/NewLeakDetector.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/NewLeakDetector.java @@ -27,25 +27,23 @@ package org.tizen.dynamicanalyzer.ui.summary.leaks; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.tizen.dynamicanalyzer.logparser.LogCenterConstants; -import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants; -import org.tizen.dynamicanalyzer.swap.model.data.FileData; import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.swap.model.data.MemoryData; import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData; import org.tizen.dynamicanalyzer.ui.toolbar.setting.data.SettingConstants; import org.tizen.dynamicanalyzer.ui.toolbar.setting.data.SettingDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.setting.data.TargetData; -import org.tizen.dynamicanalyzer.util.Logger; public class NewLeakDetector { // TODO : understand and refactoring // HashMap leakHash; // HashMap childHash; - HashMap leakHash; + Map leakHash; private int leakSeq = 0; public NewLeakDetector() { @@ -57,9 +55,9 @@ public class NewLeakDetector { return leakList; } - public HashMap getLeakHash() { + public Map getLeakHash() { if (null == leakHash) { - leakHash = new HashMap(); + leakHash = new ConcurrentHashMap(); } return leakHash; } @@ -175,7 +173,7 @@ public class NewLeakDetector { if (isDropLog(logData)) return result; - HashMap leaks = getLeakHash(); + Map leaks = getLeakHash(); if (logData instanceof MemoryData) { MemoryData mlog = (MemoryData) logData; if (mlog.getMemoryApiType() == LogCenterConstants.MEMORY_API_ALLOC) { @@ -213,9 +211,9 @@ public class NewLeakDetector { return result; } - private void addCurrentLeakData(HashMap leaks, LogData log) { + private void addCurrentLeakData(Map leaks, LogData log) { CurrentLeakData newLeak = new CurrentLeakData(log); - leaks.put((Integer)log.getKey(), newLeak); + ((ConcurrentHashMap)leaks).put((Integer)log.getKey(), newLeak); leakSeq++; } @@ -225,7 +223,7 @@ public class NewLeakDetector { leakSeq++; } - private int findAllocatedKey(HashMap leaks, long addr, int pid) { + private int findAllocatedKey(Map leaks, long addr, int pid) { for (Integer key : leaks.keySet()) { CurrentLeakData iLeakData = leaks.get(key); if (iLeakData.getAllocatedValue() == addr && iLeakData.getPid() == pid) { -- 2.7.4