Jacek Caban : wininet: Better closing async handles in tests.

Alexandre Julliard julliard at winehq.org
Fri May 13 11:17:51 CDT 2011


Module: wine
Branch: master
Commit: 188de034974feb31fd67cec0d013257edde533c1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=188de034974feb31fd67cec0d013257edde533c1

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri May 13 13:48:50 2011 +0200

wininet: Better closing async handles in tests.

---

 dlls/wininet/tests/http.c |   65 ++++++++++++++-------------------------------
 1 files changed, 20 insertions(+), 45 deletions(-)

diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index c959e5c..a754dd7 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -178,6 +178,8 @@ static BOOL proxy_active(void)
     return proxy_enable != 0;
 }
 
+static int close_handle_cnt;
+
 static VOID WINAPI callback(
      HINTERNET hInternet,
      DWORD_PTR dwContext,
@@ -276,6 +278,8 @@ static VOID WINAPI callback(
             trace("%04x:Callback %p 0x%lx INTERNET_STATUS_HANDLE_CLOSING %p %d\n",
                 GetCurrentThreadId(), hInternet, dwContext,
                 *(HINTERNET *)lpvStatusInformation, dwStatusInformationLength);
+            if(!--close_handle_cnt)
+                SetEvent(hCompleteEvent);
             break;
         case INTERNET_STATUS_REQUEST_COMPLETE:
         {
@@ -309,6 +313,20 @@ static VOID WINAPI callback(
     }
 }
 
+static void close_async_handle(HINTERNET handle, HANDLE complete_event, int handle_cnt)
+{
+    BOOL res;
+
+    close_handle_cnt = handle_cnt;
+
+    SET_EXPECT2(INTERNET_STATUS_HANDLE_CLOSING, handle_cnt);
+    res = InternetCloseHandle(handle);
+    ok(res, "InternetCloseHandle failed: %u\n", GetLastError());
+    WaitForSingleObject(hCompleteEvent, INFINITE);
+    CHECK_NOTIFIED2(INTERNET_STATUS_HANDLE_CLOSING, handle_cnt);
+    SET_EXPECT2(INTERNET_STATUS_HANDLE_CLOSING, handle_cnt);
+}
+
 static void InternetReadFile_test(int flags, const test_data_t *test)
 {
     char *post_data = NULL;
@@ -567,32 +585,7 @@ static void InternetReadFile_test(int flags, const test_data_t *test)
     }
 abort:
     trace("aborting\n");
-    SET_EXPECT2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
-    if (hor != 0x0) {
-        SetLastError(0xdeadbeef);
-        trace("closing\n");
-        res = InternetCloseHandle(hor);
-        ok (res, "InternetCloseHandle of handle opened by HttpOpenRequestA failed\n");
-        SetLastError(0xdeadbeef);
-        res = InternetCloseHandle(hor);
-        ok (!res, "Double close of handle opened by HttpOpenRequestA succeeded\n");
-        ok (GetLastError() == ERROR_INVALID_HANDLE,
-            "Double close of handle should have set ERROR_INVALID_HANDLE instead of %u\n",
-            GetLastError());
-    }
-    /* We intentionally do not close the handle opened by InternetConnectA as this
-     * tickles bug #9479: native closes child internet handles when the parent handles
-     * are closed. This is verified below by checking that the number of
-     * INTERNET_STATUS_HANDLE_CLOSING notifications matches the number expected. */
-    if (hi != 0x0) {
-      SET_WINE_ALLOW(INTERNET_STATUS_HANDLE_CLOSING);
-        trace("closing 2\n");
-      res = InternetCloseHandle(hi);
-      ok (res, "InternetCloseHandle of handle opened by InternetOpenA failed\n");
-      if (flags & INTERNET_FLAG_ASYNC)
-          Sleep(100);
-    }
-    CHECK_NOTIFIED2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
+    close_async_handle(hi, hCompleteEvent, 2);
     CloseHandle(hCompleteEvent);
     first_connection_to_test_url = FALSE;
 }
@@ -930,25 +923,7 @@ static void InternetReadFileExA_test(int flags)
     trace("Finished. Read %d bytes\n", length);
 
 abort:
-    SET_EXPECT2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
-    if (hor) {
-        rc = InternetCloseHandle(hor);
-        ok ((rc != 0), "InternetCloseHandle of handle opened by HttpOpenRequestA failed\n");
-        rc = InternetCloseHandle(hor);
-        ok ((rc == 0), "Double close of handle opened by HttpOpenRequestA succeeded\n");
-    }
-    if (hic) {
-        rc = InternetCloseHandle(hic);
-        ok ((rc != 0), "InternetCloseHandle of handle opened by InternetConnectA failed\n");
-    }
-    if (hi) {
-      SET_WINE_ALLOW(INTERNET_STATUS_HANDLE_CLOSING);
-      rc = InternetCloseHandle(hi);
-      ok ((rc != 0), "InternetCloseHandle of handle opened by InternetOpenA failed\n");
-      if (flags & INTERNET_FLAG_ASYNC)
-          Sleep(100);
-      CHECK_NOTIFIED2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
-    }
+    close_async_handle(hi, hCompleteEvent, 2);
     CloseHandle(hCompleteEvent);
     first_connection_to_test_url = FALSE;
 }




More information about the wine-cvs mailing list