changeset 36:1dc3c76e6b34

bug fixed
author sugi
date Mon, 11 Nov 2013 19:32:00 +0900
parents 9638020264cd
children b7ea73881ad3
files src/alice/topology/manager/keeparive/PingScheduler.java
diffstat 1 files changed, 27 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/alice/topology/manager/keeparive/PingScheduler.java	Mon Nov 11 18:37:10 2013 +0900
+++ b/src/alice/topology/manager/keeparive/PingScheduler.java	Mon Nov 11 19:32:00 2013 +0900
@@ -10,24 +10,24 @@
 	private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>();
 	private HashMap<String, Integer> map = new HashMap<String, Integer>();
 	private long INTERVAL = 60 * 1000;
-	
+
 	public boolean updateFlag = false;
-	private boolean postponeFlag = false;
-	
+	private boolean interruptFlag = false;
+
 	public long time = 0;
 	public int taskNum = 0;
 	public TaskInfo nowTask;
 	private long totalTime = 0;
 	private long postponeTime = 0;
-	
+
 	public long getTotalTime(){
 		return totalTime;
 	}
-	
+
 	public List<TaskInfo> getTaskList(){
 		return list;
 	}
-	
+
 	public synchronized void postpone(String name){
 		long elapsedTime = System.currentTimeMillis() - time;
 		totalTime += elapsedTime;
@@ -37,30 +37,30 @@
 			nextTask.setTime(postponeTime + nextTask.getTime());
 			nowTask.setTime(INTERVAL);
 			addTask(nowTask);
-			
+
 		} else {
+			int cnt = 0;
 			nowTask.setTime(postponeTime);
-			list.add(0, nowTask);
-			
-			for (int cnt = 0 ;cnt < list.size();  cnt++){
-				TaskInfo task = list.get(cnt);
-				if (name.equals(task.getName())){
-					if (cnt+1 < list.size()){ 
-						TaskInfo tasknext = list.get(cnt+1);
-						tasknext.setTime(task.getTime());
+			list.add(cnt, nowTask);	
+			for (TaskInfo info : list){
+				if (name.equals(info.getName())){
+					if (info != list.getLast()){ 
+						TaskInfo nextInfo = list.get(cnt+1);
+						nextInfo.setTime(nextInfo.getTime() + info.getTime());
 					} 
-					list.remove(task);
-					task.setTime(INTERVAL);
-					addTask(task);
+					list.remove(info);
+					info.setTime(INTERVAL);
+					addTask(info);
 					break;
 				}
+				cnt++;
 			}
 		}
-		postponeFlag = true;
+		interruptFlag = true;
 		notify();
 	}
-	
-	
+
+
 	public synchronized void addTask(TaskInfo newInfo){
 		if (map.containsKey(newInfo.getName())){
 			newInfo.setTaskNum(map.get(newInfo.getName()));
@@ -86,7 +86,6 @@
 				}
 				cnt++;
 			}
-			
 			list.add(cnt, newInfo);
 		}
 		updateFlag = true;
@@ -98,20 +97,23 @@
 			while(true){
 				if(list.size()== 0)
 					System.exit(0);
+				for (TaskInfo info : list){
+					System.out.println(info.getName()+" "+info.getTime());
+				}
 				nowTask = list.poll();
 				System.out.print("taskNum "+nowTask.getTaskNum());
 				System.out.println(" taskTime "+nowTask.getTime());
 				time = System.currentTimeMillis();
 				if (nowTask.getTime()!=0)
 					this.wait(nowTask.getTime());
-				if (postponeFlag){				
-					postponeFlag = false;				
+				if (interruptFlag){				
+					interruptFlag = false;				
 				} else {
 					totalTime +=nowTask.getTime();
 					nowTask.setTime(INTERVAL);
 					addTask(nowTask);					
 				}
-				
+
 			}
 		} catch (InterruptedException e) {
 		}