NetworkPkg: Httpboot will fail the 2nd time result by wrong TCP state.
If the 2nd boot quickly after the first succeed boot, it will function well. But if you wait for some time after 1nd succeed boot and boot again, the TCP state may change from established to closed wait as the http server send fin flag, then boot fail occurred. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> Reviewed-by: Ye Ting <ting.ye@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18783 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -317,7 +317,11 @@ EfiHttpRequest (
|
||||
if (EFI_ERROR (Status)) {
|
||||
RemotePort = HTTP_DEFAULT_PORT;
|
||||
}
|
||||
|
||||
//
|
||||
// If Configure is TRUE, it indicates the first time to call Request();
|
||||
// If ReConfigure is TRUE, it indicates the request URL is not same
|
||||
// with the previous call to Request();
|
||||
//
|
||||
Configure = TRUE;
|
||||
ReConfigure = TRUE;
|
||||
|
||||
@ -427,7 +431,11 @@ EfiHttpRequest (
|
||||
//
|
||||
// The request URL is different from previous calls to Request(), close existing TCP instance.
|
||||
//
|
||||
ASSERT (HttpInstance->Tcp4 != NULL &&HttpInstance->Tcp6 != NULL);
|
||||
if (!HttpInstance->LocalAddressIsIPv6) {
|
||||
ASSERT (HttpInstance->Tcp4 != NULL);
|
||||
} else {
|
||||
ASSERT (HttpInstance->Tcp6 != NULL);
|
||||
}
|
||||
HttpCloseConnection (HttpInstance);
|
||||
EfiHttpCancel (This, NULL);
|
||||
}
|
||||
@ -445,13 +453,12 @@ EfiHttpRequest (
|
||||
Wrap->HttpInstance = HttpInstance;
|
||||
Wrap->TcpWrap.Method = Request->Method;
|
||||
|
||||
if (Configure) {
|
||||
Status = HttpInitTcp (HttpInstance, Wrap);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Error2;
|
||||
}
|
||||
Status = HttpInitTcp (HttpInstance, Wrap, Configure);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Error2;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (!Configure) {
|
||||
//
|
||||
// For the new HTTP token, create TX TCP token events.
|
||||
//
|
||||
@ -460,7 +467,7 @@ EfiHttpRequest (
|
||||
goto Error1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Create request message.
|
||||
//
|
||||
|
Reference in New Issue
Block a user