FFFTPのソースコードです。
Revision | 236ce16cddb01af25b40e9092faa1fec72671604 (tree) |
---|---|
Time | 2011-11-23 23:12:31 |
Author | s_kawamoto <s_kawamoto@user...> |
Commiter | s_kawamoto |
Remove limits for multi CPUs.
@@ -1266,6 +1266,8 @@ int AskAutoExit(void); | ||
1266 | 1266 | BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted); |
1267 | 1267 | BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName); |
1268 | 1268 | BOOL LoadSSLRootCAFile(); |
1269 | +// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 | |
1270 | +BOOL IsMainThread(); | |
1269 | 1271 | |
1270 | 1272 | /*===== filelist.c =====*/ |
1271 | 1273 |
@@ -10,7 +10,7 @@ | ||
10 | 10 | // プロセスをDLL Injectionから保護する |
11 | 11 | #include "protectprocess.h" |
12 | 12 | // 使用するCPUを1個に限定する(マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策) |
13 | -#define DISABLE_MULTI_CPUS | |
13 | +//#define DISABLE_MULTI_CPUS | |
14 | 14 | // ファイル転送用のネットワークバッファを無効にする(通信中止後にリモートのディレクトリが表示されないバグ対策) |
15 | 15 | //#define DISABLE_TRANSFER_NETWORK_BUFFERS |
16 | 16 | // コントロール用のネットワークバッファを無効にする(フリーズ対策) |
@@ -132,6 +132,8 @@ static DWORD dwCookie; | ||
132 | 132 | |
133 | 133 | // 暗号化通信対応 |
134 | 134 | static char SSLRootCAFilePath[FMAX_PATH+1]; |
135 | +// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 | |
136 | +static DWORD MainThreadId; | |
135 | 137 | |
136 | 138 | |
137 | 139 | /*===== グローバルなワーク =====*/ |
@@ -313,9 +315,11 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi | ||
313 | 315 | InitializeLoadLibraryHook(); |
314 | 316 | #endif |
315 | 317 | |
318 | + // マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 | |
316 | 319 | #ifdef DISABLE_MULTI_CPUS |
317 | 320 | SetProcessAffinityMask(GetCurrentProcess(), 1); |
318 | 321 | #endif |
322 | + MainThreadId = GetCurrentThreadId(); | |
319 | 323 | |
320 | 324 | // yutaka |
321 | 325 | if(OleInitialize(NULL) != S_OK){ |
@@ -2831,7 +2835,9 @@ int BackgrndMessageProc(void) | ||
2831 | 2835 | Ret = NO; |
2832 | 2836 | while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) |
2833 | 2837 | { |
2834 | - if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg)) | |
2838 | + // マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 | |
2839 | +// if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg)) | |
2840 | + if(!IsMainThread() || !HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg)) | |
2835 | 2841 | { |
2836 | 2842 | /* ディレクトリ名の表示コンボボックスでBSやRETが効くように */ |
2837 | 2843 | /* コンボボックス内ではアクセラレータを無効にする */ |
@@ -3027,3 +3033,10 @@ BOOL LoadSSLRootCAFile() | ||
3027 | 3033 | return bResult; |
3028 | 3034 | } |
3029 | 3035 | |
3036 | +// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 | |
3037 | +BOOL IsMainThread() | |
3038 | +{ | |
3039 | + if(GetCurrentThreadId() != MainThreadId) | |
3040 | + return FALSE; | |
3041 | + return TRUE; | |
3042 | +} | |
\ No newline at end of file |