MdeModulePkg: Remove TransmitReceive() and ActiveChild dependency

Fix git 59a8cfd4 (SVN r17869) removes DHCP4.TransmitReceive()and DORA
process dependency, but it updated TransmitReceive() to take the ownership
of DhcpSb->ActiveChild but never release it. This will break the retransmit
and lease time out counter of DORA.
To fix that, TransmitReceive() doesn't need to be the ActiveChild, and the
timer routine should be updated to handle the TransmitReceive specially.

Cc: Fu Siyuan <siyuan.fu@intel.com>
Cc: Ye Ting <ting.ye@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Signed-off-by: Laszlo Ersek <lersek@redhat.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18048 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Jiaxin Wu 2015-07-26 08:03:20 +00:00 committed by jljusten
parent 2cec9ccde7
commit 48bd653033
2 changed files with 13 additions and 5 deletions

View File

@ -1494,7 +1494,6 @@ EfiDhcp4TransmitReceive (
Instance = DHCP_INSTANCE_FROM_THIS (This);
DhcpSb = Instance->Service;
DhcpSb->ActiveChild = Instance;
if (Instance->Token != NULL) {
//

View File

@ -1518,6 +1518,8 @@ DhcpOnTimerTick (
IN VOID *Context
)
{
LIST_ENTRY *Entry;
LIST_ENTRY *Next;
DHCP_SERVICE *DhcpSb;
DHCP_PROTOCOL *Instance;
EFI_STATUS Status;
@ -1665,10 +1667,17 @@ DhcpOnTimerTick (
}
ON_EXIT:
if ((Instance != NULL) && (Instance->Token != NULL)) {
Instance->Timeout--;
if (Instance->Timeout == 0) {
PxeDhcpDone (Instance);
//
// Iterate through all the DhcpSb Children.
//
NET_LIST_FOR_EACH_SAFE (Entry, Next, &DhcpSb->Children) {
Instance = NET_LIST_USER_STRUCT (Entry, DHCP_PROTOCOL, Link);
if ((Instance != NULL) && (Instance->Token != NULL)) {
Instance->Timeout--;
if (Instance->Timeout == 0) {
PxeDhcpDone (Instance);
}
}
}