Masanobu Yasui authored on 2009/05/22 20:20:44
Showing 3 changed files
... ...
@@ -2,7 +2,7 @@
2 2
  - エラーログに"[error]"という文字列を追加した
3 3
  - メンバがタイムアウトしたときの状態を詳細に出力するようにした
4 4
  - msyncのstatusオプションで、実行中のコマンドを表示するようにした
5
- - 応答速度が少しだけ向上した気がする
5
+ - レイテンシが若干向上した
6 6
  - msyncを複数同時実行したときに挙動がおかしくなる不具合を修正
7 7
  - ファイルクローズが失敗したときに異常終了することがあった不具合を修正
8 8
  - msyncにdeleteオプションを指定したときの結果表示がおかしくなる不具合を修正
... ...
@@ -10,11 +10,10 @@
10 10
 
11 11
 1.1.3: 2009/1/14
12 12
  - FreeBSDから msync -r ができなかった不具合を修正
13
- - FreeBSDでは受信はできましたが、送信できない状態でした
14
- - msync --membersの結果をソートするようにしました
13
+ - msync --membersの結果をソートするようにした
15 14
 
16 15
 1.1.2: 2008/12/24
17
- - makuosan終了時にシャットダウンメッセージを飛ばしていなかった不具合を修正
16
+ - 終了時にシャットダウンメッセージを飛ばしていなかった不具合を修正
18 17
 
19 18
 1.1.1: 2008/12/24
20 19
  - msyncコマンドに--deleteオプションを追加
... ...
@@ -22,8 +21,8 @@
22 22
  - エラーを詳細に表示するようにした
23 23
 
24 24
 1.0.1: 2008/11/12
25
- - FreeBSDとMacOSXに対応しました
26
- - SPECファイルと起動スクリプトを同梱しました
25
+ - FreeBSDとMacOSXに対応
26
+ - SPECファイルと起動スクリプトを同梱
27 27
 
28 28
 1.0.0: 2008/11/6
29 29
  - 安定版リリース
... ...
@@ -5,7 +5,7 @@
5 5
 #ifdef HAVE_CONFIG_H
6 6
 #include "config.h"
7 7
 #endif
8
-#define PROTOCOL_VERSION 5
8
+#define PROTOCOL_VERSION 6
9 9
 #define _GNU_SOURCE
10 10
 #define _FILE_OFFSET_BITS 64
11 11
 #include <stdio.h>
... ...
@@ -979,31 +979,23 @@ static int msend_req_del_stat_waitcheck(int s, mfile *m)
979 979
 
980 980
 static void msend_req_del_stat(int s, mfile *m)
981 981
 {
982
-  if(m->pid == 0){
982
+  if(m->pipe != -1){
983
+    msend_req_del_stat_read(s, m);
984
+  }else{
983 985
     if(msend_req_del_stat_waitcheck(s, m)){
984 986
       m->sendwait = 1;
985 987
     }else{
986
-      m->mdata.head.nstate = MAKUO_SENDSTATE_LAST;
987
-      m->initstate = 1;
988
-      m->sendwait  = 0;
989
-      ack_clear(m, -1);
990
-    }
991
-    return;
992
-  }
993
-  if(m->pipe == -1){
994
-    if(waitpid(m->pid, NULL, WNOHANG) == m->pid){
995
-      m->pid = 0;
996
-    }else{
997
-      m->sendwait = 1;
988
+      if(m->link){
989
+        msend(mkack(&(m->link->mdata), &(m->link->addr), MAKUO_RECVSTATE_CLOSE));
990
+      }
991
+      if(waitpid(m->pid, NULL, WNOHANG) != m->pid){
992
+        m->sendwait = 1;
993
+      }else{
994
+        m->pid = 0;
995
+        msend_mfdel(m);
996
+      }
998 997
     }
999
-    return;
1000 998
   }
1001
-  msend_req_del_stat_read(s, m);
1002
-}
1003
-
1004
-static void msend_req_del_last(int s, mfile *m)
1005
-{
1006
-  msend_mfdel(m);
1007 999
 }
1008 1000
 
1009 1001
 static void msend_req_del_break(int s, mfile *m)
... ...
@@ -1068,6 +1060,9 @@ static void msend_req_del_close(int s, mfile *m)
1068 1068
     msend_packet(s, &(m->mdata), &(m->addr));
1069 1069
     return;
1070 1070
   }
1071
+  if(m->link){
1072
+    m->link->sendwait = 0;
1073
+  }
1071 1074
   m->link = NULL;
1072 1075
   msend_mfdel(m);
1073 1076
 }
... ...
@@ -1079,9 +1074,6 @@ static void msend_req_del(int s, mfile *m)
1079 1079
     case MAKUO_SENDSTATE_STAT:
1080 1080
       msend_req_del_stat(s, m);
1081 1081
       break;
1082
-    case MAKUO_SENDSTATE_LAST:
1083
-      msend_req_del_last(s, m);
1084
-      break;
1085 1082
     case MAKUO_SENDSTATE_BREAK:
1086 1083
       msend_req_del_break(s, m);
1087 1084
       break;