]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpDxe/HttpProto.c
NetworkPkg: Avoid memory allocation for each HTTP message exchange.
[mirror_edk2.git] / NetworkPkg / HttpDxe / HttpProto.c
index 829758ad5ea4173e1ab23333cf623912cc025cc7..99f907e10c7f96e8598d90de41e1a0b6e27c9038 100644 (file)
@@ -243,10 +243,12 @@ HttpCloseTcp4ConnCloseEvent (
 \r
   if (NULL != HttpInstance->ConnToken.CompletionToken.Event) {\r
     gBS->CloseEvent (HttpInstance->ConnToken.CompletionToken.Event);\r
+    HttpInstance->ConnToken.CompletionToken.Event = NULL;\r
   }\r
 \r
   if (NULL != HttpInstance->CloseToken.CompletionToken.Event) {\r
     gBS->CloseEvent(HttpInstance->CloseToken.CompletionToken.Event);\r
+    HttpInstance->CloseToken.CompletionToken.Event = NULL;\r
   }  \r
 }\r
 \r
@@ -429,6 +431,12 @@ HttpInitProtocol (
     goto ON_ERROR;\r
   }\r
 \r
+  HttpInstance->Url = AllocateZeroPool (HTTP_URL_BUFFER_LEN);\r
+  if (HttpInstance->Url == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto ON_ERROR;\r
+  }\r
+\r
   NetMapInit (&HttpInstance->TxTokens);\r
   NetMapInit (&HttpInstance->RxTokens);\r
 \r
@@ -494,6 +502,11 @@ HttpCleanProtocol (
     HttpInstance->MsgParser = NULL;\r
   }\r
 \r
+  if (HttpInstance->Url != NULL) {\r
+    FreePool (HttpInstance->Url);\r
+    HttpInstance->Url = NULL;\r
+  }\r
+\r
   NetMapClean (&HttpInstance->TxTokens);\r
   NetMapClean (&HttpInstance->RxTokens);\r
 \r
@@ -581,21 +594,22 @@ HttpCloseConnection (
 {\r
   EFI_STATUS                Status;\r
 \r
-  HttpInstance->CloseToken.AbortOnClose = TRUE;\r
-  HttpInstance->IsCloseDone             = FALSE;\r
-  \r
-\r
-  Status = HttpInstance->Tcp4->Close (HttpInstance->Tcp4, &HttpInstance->CloseToken);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
+  if (HttpInstance->State == HTTP_STATE_TCP_CONNECTED) {\r
+    HttpInstance->CloseToken.AbortOnClose = TRUE;\r
+    HttpInstance->IsCloseDone             = FALSE;\r
+    \r
+    Status = HttpInstance->Tcp4->Close (HttpInstance->Tcp4, &HttpInstance->CloseToken);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
 \r
-  while (!HttpInstance->IsCloseDone) {\r
-    HttpInstance->Tcp4->Poll (HttpInstance->Tcp4);\r
+    while (!HttpInstance->IsCloseDone) {\r
+      HttpInstance->Tcp4->Poll (HttpInstance->Tcp4);\r
+    }\r
   }\r
 \r
   HttpInstance->State = HTTP_STATE_TCP_CLOSED;\r
-  return Status;\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r