• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

FFFTPのソースコードです。


Commit MetaInfo

Revision46cb6ad4eea69835e1aab2d29ed9c8117a6d516b (tree)
Zeit2011-10-15 16:22:08
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Log Message

Fix bugs of asyncronous socket control.
Fix bugs of deadlock around file deletion.
Adjust performance of simultaneous connection.
Fix bugs of UI for Kanji code of filenames.
Change handling timestamp that do not include year.
This version may be nearly stable (not for 1.99 but for 1.98b).

Ändern Zusammenfassung

Diff

Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
--- a/Resource_eng/FFFTP-eng.rc
+++ b/Resource_eng/FFFTP-eng.rc
@@ -741,8 +741,8 @@ BEGIN
741741 CONTROL "UTF-8",HSET_UTF8N_CNV,"Button",BS_AUTORADIOBUTTON,12,69,41,10
742742 CONTROL "Hankaku to Zenkaku",HSET_HANCNV,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,12,96,90,10
743743 GROUPBOX "&Filename Kanji Code",-1,107,7,97,116,WS_GROUP
744- CONTROL "Automatic",HSET_FN_AUTO_CNV,"Button",BS_AUTORADIOBUTTON | WS_GROUP,114,21,65,10
745- CONTROL "Shift_JIS",HSET_FN_SJIS_CNV,"Button",BS_AUTORADIOBUTTON | WS_GROUP,111,33,65,10
744+ CONTROL "Automatic",HSET_FN_AUTO_CNV,"Button",BS_AUTORADIOBUTTON | WS_GROUP,111,21,65,10
745+ CONTROL "Shift_JIS",HSET_FN_SJIS_CNV,"Button",BS_AUTORADIOBUTTON,111,33,65,10
746746 CONTROL "JIS",HSET_FN_JIS_CNV,"Button",BS_AUTORADIOBUTTON,111,45,70,10
747747 CONTROL "EUC",HSET_FN_EUC_CNV,"Button",BS_AUTORADIOBUTTON,111,57,41,10
748748 CONTROL "Samba-HEX",HSET_FN_SMH_CNV,"Button",BS_AUTORADIOBUTTON,111,69,66,10
--- a/filelist.c
+++ b/filelist.c
@@ -4771,9 +4771,11 @@ static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size,
47714771
47724772 /* 年がない */
47734773 /* 現在の日付から推定 */
4774- if((sTimeNow.wMonth == 12) && (sTime.wMonth == 1))
4775- sTime.wYear++;
4776- else if(sTimeNow.wMonth+1 == sTime.wMonth)
4774+ // 恐らくホストとローカルの時刻が異なる場合の対処のようだがとりあえず無効にする
4775+// if((sTimeNow.wMonth == 12) && (sTime.wMonth == 1))
4776+// sTime.wYear++;
4777+// else if(sTimeNow.wMonth+1 == sTime.wMonth)
4778+ if(sTimeNow.wMonth+1 == sTime.wMonth)
47774779 /* nothing */;
47784780 else if(sTimeNow.wMonth < sTime.wMonth)
47794781 sTime.wYear--;
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -1960,6 +1960,8 @@ void DeleteProc(void)
19601960 char CurDir[FMAX_PATH+1];
19611961 char Tmp[FMAX_PATH+1];
19621962
1963+ // デッドロック対策
1964+ DisableUserOpe();
19631965 Sts = YES;
19641966 AskRemoteCurDir(CurDir, FMAX_PATH);
19651967 FileListBase = NULL;
@@ -1979,7 +1981,8 @@ void DeleteProc(void)
19791981
19801982 if(Sts == YES)
19811983 {
1982- DisableUserOpe();
1984+ // デッドロック対策
1985+// DisableUserOpe();
19831986
19841987 DelFlg = NO;
19851988 Sts = NO;
@@ -2015,8 +2018,11 @@ void DeleteProc(void)
20152018 GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);
20162019 }
20172020
2018- EnableUserOpe();
2021+ // デッドロック対策
2022+// EnableUserOpe();
20192023 }
2024+ // デッドロック対策
2025+ EnableUserOpe();
20202026 return;
20212027 }
20222028
--- a/getput.c
+++ b/getput.c
@@ -143,6 +143,9 @@ static int MoveToForeground = NO; /* ウインドウを前面に移動するか
143143 static char CurDir[FMAX_PATH+1] = { "" };
144144 static char ErrMsg[ERR_MSG_LEN+7];
145145
146+// 同時接続対応
147+static int WaitForMainThread = NO;
148+
146149 /*===== 外部参照 =====*/
147150
148151 /* 設定値 */
@@ -362,6 +365,7 @@ void AddTransFileList(TRANSPACKET *Pkt)
362365 // WaitForSingleObject(hListAccMutex, INFINITE);
363366 while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
364367 {
368+ WaitForMainThread = YES;
365369 BackgrndMessageProc();
366370 Sleep(1);
367371 }
@@ -379,6 +383,8 @@ void AddTransFileList(TRANSPACKET *Pkt)
379383 if(NextTransPacketBase == NULL)
380384 NextTransPacketBase = TransPacketBase;
381385 ReleaseMutex(hListAccMutex);
386+ // 同時接続対応
387+ WaitForMainThread = NO;
382388
383389 return;
384390 }
@@ -405,6 +411,7 @@ void AppendTransFileList(TRANSPACKET *Pkt)
405411 // WaitForSingleObject(hListAccMutex, INFINITE);
406412 while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
407413 {
414+ WaitForMainThread = YES;
408415 BackgrndMessageProc();
409416 Sleep(1);
410417 }
@@ -436,6 +443,8 @@ void AppendTransFileList(TRANSPACKET *Pkt)
436443 }
437444
438445 ReleaseMutex(hListAccMutex);
446+ // 同時接続対応
447+ WaitForMainThread = NO;
439448 return;
440449 }
441450
@@ -492,6 +501,7 @@ static void EraseTransFileList(void)
492501 // WaitForSingleObject(hListAccMutex, INFINITE);
493502 while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
494503 {
504+ WaitForMainThread = YES;
495505 BackgrndMessageProc();
496506 Sleep(1);
497507 }
@@ -525,6 +535,8 @@ static void EraseTransFileList(void)
525535 TransFiles = 0;
526536 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
527537 ReleaseMutex(hListAccMutex);
538+ // 同時接続対応
539+ WaitForMainThread = NO;
528540
529541 strcpy(Pkt.Cmd, "GOQUIT");
530542 AddTransFileList(&Pkt);
@@ -649,6 +661,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
649661 CmdSkt = INVALID_SOCKET;
650662 NewCmdSkt = INVALID_SOCKET;
651663 TrnSkt = INVALID_SOCKET;
664+ SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
652665
653666 while((TransPacketBase != NULL) ||
654667 (WaitForSingleObject(hRunMutex, 200) == WAIT_TIMEOUT))
@@ -656,6 +669,13 @@ static ULONG WINAPI TransferThread(void *Dummy)
656669 if(fTransferThreadExit == TRUE)
657670 break;
658671
672+ if(WaitForMainThread == YES)
673+ {
674+ BackgrndMessageProc();
675+ Sleep(100);
676+ continue;
677+ }
678+
659679 // WaitForSingleObject(hListAccMutex, INFINITE);
660680 while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
661681 {
@@ -1089,7 +1109,8 @@ static ULONG WINAPI TransferThread(void *Dummy)
10891109 }
10901110 }
10911111 BackgrndMessageProc();
1092- Sleep(1);
1112+// Sleep(1);
1113+ Sleep(100);
10931114
10941115 if(GoExit == YES)
10951116 {
@@ -1116,7 +1137,10 @@ static ULONG WINAPI TransferThread(void *Dummy)
11161137 hWndTrans = NULL;
11171138 }
11181139 BackgrndMessageProc();
1119- Sleep(1);
1140+ if(ThreadCount < AskMaxThreadCount())
1141+ Sleep(1);
1142+ else
1143+ Sleep(100);
11201144 }
11211145 }
11221146 if(TrnSkt != INVALID_SOCKET)
--- a/socket.c
+++ b/socket.c
@@ -484,8 +484,8 @@ static int RegistAsyncTable(SOCKET s)
484484 {
485485 // 強制的に閉じられたソケットがあると重複する可能性あり
486486 // MessageBox(GetMainHwnd(), "Async socket already registerd.", "FFFTP inner error", MB_OK);
487+// break;
487488 Signal[Pos].Socket = INVALID_SOCKET;
488- break;
489489 }
490490 }
491491 // スレッド衝突のバグ修正