# HG changeset patch # User one # Date 1284271906 -32400 # Node ID 15888d516f10b6f35cb6991e91bb1cfdc2e73419 # Parent c50cee354f62f9bafa1ff8ac360e22ba8f284832 wait for pervious merge completion in getMargedAgain diff -r c50cee354f62 -r 15888d516f10 Todo --- a/Todo Sat Sep 11 18:01:04 2010 +0900 +++ b/Todo Sun Sep 12 15:11:46 2010 +0900 @@ -2,6 +2,11 @@ これ、やっぱり難しすぎ。getMergeAgain で、sentMergedList が空でない場合がある。 +Termination するようにはなった。しかし、Merge はダメなようだ。 + +mergeAgain した時に、前のmerge command がeditorから返されることがあって、 +それは、全部、読む必要がある。 + Sat Jan 16 18:06:37 JST 2010 sentList 全部削除だと quit2 が早めに出されてしまうので、 diff -r c50cee354f62 -r 15888d516f10 rep/handler/Translator.java --- a/rep/handler/Translator.java Sat Sep 11 18:01:04 2010 +0900 +++ b/rep/handler/Translator.java Sun Sep 12 15:11:46 2010 +0900 @@ -96,9 +96,10 @@ REPCommand m = new REPCommand(c); m.setEID(REP.MERGE_EID.id); m.setSEQID(editor.seq()); - sentMergedList.add(m); + sentMergedList.addLast(m); editor.send(m); - } + } + logger.writeLog("Output eid="+eid+"SentMergedList = "+sentMergedList); merge_mode = true; return true; } @@ -144,18 +145,23 @@ public boolean checkMergeConflict(REPCommand command) { unMergedCmds.addFirst(command); - if (mergeAgain) { - return true; + REPCommand prev = sentMergedList.getFirst(); + if (prev.seq==command.seq) { + logger.writeLog("Input eid="+eid+"SentMergedList = "+sentMergedList); + sentMergedList.removeFirst(); + } else { + // previous merge command may be returned } - REPCommand prev = sentMergedList.remove(); - assert (prev.seq==command.seq); - if(sentMergedList.size()==0) { + + if(sentMergedList.size()==0 && !mergeAgain) { merge_mode=false; } - return false; + return mergeAgain; } public void getMergeAgain(REPNode editor) { + if (sentMergedList.size()>0) return; // wait for previous merge completion + LinkedList returnCommand = new LinkedList(); LinkedList merge = new LinkedList(); LinkedList conflict = new LinkedList(); @@ -184,7 +190,7 @@ // default: assert false; // } // } - logger.writeLog("MergeAgain ret="+returnCommand.size()); + logger.writeLog("MergeAgain "+eid+" ret="+returnCommand.size()); // +" increment="+count); mergeAgain = false; optimizedSend(editor, returnCommand);