The existing uninstall call was passing the wrong handle (parent object, not the correct child object) and additionally passing the address of a pointer to the interface to be removed rather than the pointer itself, so always failed with EFI_NOT_FOUND. After altering these, we add an ASSERT which confirms that the modified uninstall is succeeding.
Cc: Maciej Rabeda <maciej.rab...@linux.intel.com> Cc: Jiaxin Wu <jiaxin...@intel.com> Cc: Siyuan Fu <siyuan...@intel.com> Signed-off-by: Mike Beaton <mjsbea...@gmail.com> --- NetworkPkg/HttpBootDxe/HttpBootImpl.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/NetworkPkg/HttpBootDxe/HttpBootImpl.c b/NetworkPkg/HttpBootDxe/HttpBootImpl.c index b4c61925b9..100b721ad4 100644 --- a/NetworkPkg/HttpBootDxe/HttpBootImpl.c +++ b/NetworkPkg/HttpBootDxe/HttpBootImpl.c @@ -77,12 +77,23 @@ HttpBootUninstallCallback ( IN HTTP_BOOT_PRIVATE_DATA *Private ) { + EFI_STATUS Status; + EFI_HANDLE ControllerHandle; + if (Private->HttpBootCallback == &Private->LoadFileCallback) { - gBS->UninstallProtocolInterface ( - Private->Controller, - &gEfiHttpBootCallbackProtocolGuid, - &Private->HttpBootCallback - ); + if (!Private->UsingIpv6) { + ControllerHandle = Private->Ip4Nic->Controller; + } else { + ControllerHandle = Private->Ip6Nic->Controller; + } + + Status = gBS->UninstallProtocolInterface ( + ControllerHandle, + &gEfiHttpBootCallbackProtocolGuid, + Private->HttpBootCallback + ); + ASSERT_EFI_ERROR (Status); + Private->HttpBootCallback = NULL; } } -- 2.44.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#117468): https://edk2.groups.io/g/devel/message/117468 Mute This Topic: https://groups.io/mt/105368366/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-