Can we safely remove the ASSERt now?

> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of
> Marvin Häuser
> Sent: Thursday, May 19, 2016 12:04 PM
> To: [email protected]
> Cc: Carsey, Jaben <[email protected]>; Qiu, Shumin
> <[email protected]>
> Subject: [edk2] [PATCH v1 1/1] ShellPkg/App: Fix memory leak and save
> resources.
> Importance: High
> 
> 1) RunSplitCommand() allocates the initial SplitStdOut via
>    CreateFileInterfaceMem(). Free SplitStdIn after the swap to fix
>    the memory leak.
> 
> 2) In RunSplitCommand(), SplitStdOut is checked for equality with
>    StdIn. This cannot happen due to the if-check within the swap.
>    Hence remove it.
> 
> 3) UefiMain() doesn't free SplitList. Delete all list entries and
>    reinitialize the list when in DEBUG. This does not include the
>    CreateFileInterfaceMem()-allocated SplitStd mentioned in 1), so
>    keep the ASSERT() until resolved.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Marvin Haeuser <[email protected]>
> ---
>  ShellPkg/Application/Shell/Shell.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/ShellPkg/Application/Shell/Shell.c
> b/ShellPkg/Application/Shell/Shell.c
> index 47b3118ea701..a562c9a2c0bc 100644
> --- a/ShellPkg/Application/Shell/Shell.c
> +++ b/ShellPkg/Application/Shell/Shell.c
> @@ -342,6 +342,7 @@ UefiMain (
>    UINTN                           Size;
>    EFI_HANDLE                      ConInHandle;
>    EFI_SIMPLE_TEXT_INPUT_PROTOCOL  *OldConIn;
> +  SPLIT_LIST                      *Split;
> 
>    if (PcdGet8(PcdShellSupportLevel) > 3) {
>      return (EFI_UNSUPPORTED);
> @@ -675,7 +676,17 @@ FreeResources:
>    }
> 
>    if (!IsListEmpty(&ShellInfoObject.SplitList.Link)){
> -    ASSERT(FALSE); ///@todo finish this de-allocation.
> +    ASSERT(FALSE); ///@todo finish this de-allocation (free SplitStdIn/Out
> when needed).
> +
> +    for ( Split = (SPLIT_LIST*)GetFirstNode (&ShellInfoObject.SplitList.Link)
> +        ; !IsNull (&ShellInfoObject.SplitList.Link, &Split->Link)
> +        ; Split = (SPLIT_LIST *)GetNextNode (&ShellInfoObject.SplitList.Link,
> &Split->Link)
> +     ) {
> +      RemoveEntryList (&Split->Link);
> +      FreePool (Split);
> +    }
> +
> +    DEBUG_CODE (InitializeListHead (&ShellInfoObject.SplitList.Link););
>    }
> 
>    if (ShellInfoObject.ShellInitSettings.FileName != NULL) {
> @@ -1736,11 +1747,12 @@ RunSplitCommand(
>    //
>    // Note that the original StdIn is now the StdOut...
>    //
> -  if (Split->SplitStdOut != NULL && Split->SplitStdOut != StdIn) {
> +  if (Split->SplitStdOut != NULL) {
>      ShellInfoObject.NewEfiShellProtocol-
> >CloseFile(ConvertShellHandleToEfiFileProtocol(Split->SplitStdOut));
>    }
>    if (Split->SplitStdIn != NULL) {
>      ShellInfoObject.NewEfiShellProtocol-
> >CloseFile(ConvertShellHandleToEfiFileProtocol(Split->SplitStdIn));
> +    FreePool (Split->SplitStdIn);
>    }
> 
>    FreePool(Split);
> --
> 2.7.4.windows.1
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to