OSDN Git Service

Fix bugs of asyncronous socket control.
[ffftp/ffftp.git] / socket.c
index b3d4163..8773978 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -271,6 +271,8 @@ static LRESULT CALLBACK SocketWndProc(HWND hWnd, UINT message, WPARAM wParam, LP
                        break;\r
 \r
                case WM_ASYNC_DBASE :\r
+                       // APIの仕様上ハンドルが登録される前にウィンドウメッセージが呼び出される可能性あり\r
+                       RegistAsyncTableDbase((HANDLE)wParam);\r
                        // スレッド衝突のバグ修正\r
                        WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
                        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
@@ -291,31 +293,6 @@ static LRESULT CALLBACK SocketWndProc(HWND hWnd, UINT message, WPARAM wParam, LP
                                        break;\r
                                }\r
                        }\r
-                       // APIの仕様上ハンドルが登録される前にウィンドウメッセージが呼び出される可能性あり\r
-                       if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
-                       {\r
-                               for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
-                               {\r
-                                       if(SignalDbase[Pos].Async == 0)\r
-                                       {\r
-                                               SignalDbase[Pos].Async = (HANDLE)wParam;\r
-                                               SignalDbase[Pos].Done = 0;\r
-                                               SignalDbase[Pos].ErrorDb = 0;\r
-                                               if(HIWORD(lParam) != 0)\r
-                                               {\r
-                                                       SignalDbase[Pos].ErrorDb = 1;\r
-#if DBG_MSG\r
-                                                       DoPrintf("##### SignalDatabase: error");\r
-#endif\r
-                                               }\r
-                                               SignalDbase[Pos].Done = 1;\r
-#if DBG_MSG\r
-                                               DoPrintf("##### SignalDatabase: Done");\r
-#endif\r
-                                               break;\r
-                                       }\r
-                               }\r
-                       }\r
                        // スレッド衝突のバグ修正\r
                        ReleaseMutex(hAsyncTblAccMutex);\r
                        break;\r
@@ -738,6 +715,9 @@ int do_closesocket(SOCKET s)
 #endif\r
        CancelCheckWork = NO;\r
 \r
+       // スレッド衝突のバグ修正\r
+       WSAAsyncSelect(s, hWndSocket, WM_ASYNC_SOCKET, 0);\r
+       UnRegistAsyncTable(s);\r
        // FTPS対応\r
 //     Ret = closesocket(s);\r
        Ret = closesocketS(s);\r
@@ -755,10 +735,12 @@ int do_closesocket(SOCKET s)
                        Ret = 0;\r
        }\r
 \r
-       WSAAsyncSelect(s, hWndSocket, WM_ASYNC_SOCKET, 0);\r
+       // スレッド衝突のバグ修正\r
+//     WSAAsyncSelect(s, hWndSocket, WM_ASYNC_SOCKET, 0);\r
        if(BackgrndMessageProc() == YES)\r
                CancelCheckWork = YES;\r
-       UnRegistAsyncTable(s);\r
+       // スレッド衝突のバグ修正\r
+//     UnRegistAsyncTable(s);\r
 \r
 #if DBG_MSG\r
        DoPrintf("# Exit close");\r