# HG changeset patch # User sugi # Date 1384165920 -32400 # Node ID 1dc3c76e6b345e7ff5b108cef9f941332f54c5f7 # Parent 9638020264cde80465a3836e1b86dc05afe97ae7 bug fixed diff -r 9638020264cd -r 1dc3c76e6b34 src/alice/topology/manager/keeparive/PingScheduler.java --- 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 list = new LinkedList(); private HashMap map = new HashMap(); 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 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) { }