wininet: Store server_t on the list until clean up.

This commit is contained in:
Jacek Caban 2012-05-25 16:35:32 +02:00 committed by Alexandre Julliard
parent f3dd75d8a4
commit 95c1b74fc9
2 changed files with 9 additions and 13 deletions

View File

@ -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);
}
}

View File

@ -61,7 +61,6 @@ typedef struct {
char addr_str[INET6_ADDRSTRLEN];
LONG ref;
DWORD64 keep_until;
DWORD security_flags;