Summary : modify data structure for thread safety in the leak table. (HashMap --... 16/32416/1
authorseokgil.kang <seokgil.kang@samsung.com>
Thu, 18 Dec 2014 03:26:09 +0000 (12:26 +0900)
committerseokgil.kang <seokgil.kang@samsung.com>
Thu, 18 Dec 2014 03:26:09 +0000 (12:26 +0900)
Change-Id: I7726636b09ce98f17a58f3f2175e32dda2e47bbb
Signed-off-by: seokgil.kang <seokgil.kang@samsung.com>
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/LeakTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/leaks/NewLeakDetector.java

index 5b68ceb..c3c0bc3 100644 (file)
@@ -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<Integer, CurrentLeakData> leaks = leakDetector.getLeakHash();
+               Map<Integer, CurrentLeakData> leaks = leakDetector.getLeakHash();
                for (Integer key : leaks.keySet()) {
                        makeLeakData(leaks.get(key));
                }
index d7ba602..0d79849 100644 (file)
@@ -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<TreeInput> makeTreeInput() {
                List<TreeInput> output = new ArrayList<TreeInput>();
-               HashMap<Integer, CurrentLeakData> leaks = null;
+               Map<Integer, CurrentLeakData> leaks = null;
                List<List<Object>> leakDataList = null;
                // TODO : make hashkey (LogData.getKey() --> combination of pid and
                // address)
index 0990df9..41d3d45 100644 (file)
 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<Long, CurrentLeakData> leakHash;
 //     HashMap<Long, CurrentLeakData> childHash;
-       HashMap<Integer, CurrentLeakData> leakHash;
+       Map<Integer, CurrentLeakData> leakHash;
        private int leakSeq = 0;
 
        public NewLeakDetector() {
@@ -57,9 +55,9 @@ public class NewLeakDetector {
                return leakList;
        }
 
-       public HashMap<Integer, CurrentLeakData> getLeakHash() {
+       public Map<Integer, CurrentLeakData> getLeakHash() {
                if (null == leakHash) {
-                       leakHash = new HashMap<Integer, CurrentLeakData>();
+                       leakHash = new ConcurrentHashMap<Integer, CurrentLeakData>();
                }
                return leakHash;
        }
@@ -175,7 +173,7 @@ public class NewLeakDetector {
 
                if (isDropLog(logData)) return result;
                
-               HashMap<Integer, CurrentLeakData> leaks = getLeakHash();
+               Map<Integer, CurrentLeakData> 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<Integer, CurrentLeakData> leaks, LogData log) {
+       private void addCurrentLeakData(Map<Integer, CurrentLeakData> leaks, LogData log) {
                CurrentLeakData newLeak = new CurrentLeakData(log);
-               leaks.put((Integer)log.getKey(), newLeak);
+               ((ConcurrentHashMap<Integer, CurrentLeakData>)leaks).put((Integer)log.getKey(), newLeak);
                leakSeq++;
        }
        
@@ -225,7 +223,7 @@ public class NewLeakDetector {
                leakSeq++;
        }
        
-       private int findAllocatedKey(HashMap<Integer, CurrentLeakData> leaks, long addr, int pid) {
+       private int findAllocatedKey(Map<Integer, CurrentLeakData> leaks, long addr, int pid) {
                for (Integer key : leaks.keySet()) {
                        CurrentLeakData iLeakData = leaks.get(key);
                        if (iLeakData.getAllocatedValue() == addr && iLeakData.getPid() == pid) {