Jacek Caban : wininet: Store server_t on the list until clean up.

Alexandre Julliard julliard at winehq.org
Fri May 25 10:52:49 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri May 25 16:35:32 2012 +0200

wininet: Store server_t on the list until clean up.

---

 dlls/wininet/http.c     |   21 +++++++++------------
 dlls/wininet/internet.h |    1 -
 2 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 50f77df..e32dde6 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -242,8 +242,10 @@ void server_release(server_t *server)
     if(InterlockedDecrement(&server->ref))
         return;
 
-    if(!server->ref)
-        server->keep_until = GetTickCount64() + COLLECT_TIME;
+    list_remove(&server->entry);
+
+    heap_free(server->name);
+    heap_free(server);
 }
 
 static server_t *get_server(const WCHAR *name, INTERNET_PORT port)
@@ -264,7 +266,7 @@ static server_t *get_server(const WCHAR *name, INTERNET_PORT port)
         server = heap_alloc(sizeof(*server));
         if(server) {
             server->addr_len = 0;
-            server->ref = 1;
+            server->ref = 2; /* list reference and return */
             server->port = port;
             server->security_flags = 0;
             list_init(&server->conn_pool);
@@ -303,15 +305,10 @@ BOOL collect_connections(BOOL collect_all)
             }
         }
 
-        if(!server->ref) {
-            if(collect_all || server->keep_until < now) {
-                list_remove(&server->entry);
-
-                heap_free(server->name);
-                heap_free(server);
-            }else {
-                remaining = TRUE;
-            }
+        if(collect_all) {
+            list_remove(&server->entry);
+            list_init(&server->entry);
+            server_release(server);
         }
     }
 
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index bf11e6d..30869d9 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -61,7 +61,6 @@ typedef struct {
     char addr_str[INET6_ADDRSTRLEN];
 
     LONG ref;
-    DWORD64 keep_until;
 
     DWORD security_flags;
 




More information about the wine-cvs mailing list