Hey Jaben,

As I mentioned in 3), there is still the CreateFileInterfaceMem() resource leak 
if the list is not empty, so this is definitely still a todo, I do not know how 
to solve (yet?). I only kept the ASSERT() because it was present before, I 
don't really see the point in stopping execution there to be honest.

By the way, if you have time, please review my other two patches as well:
[PATCH v1] ShellPkg: Also accept gEfiUnicodeCollation2ProtocolGuid for parsing.
[PATCH v1] ShellPkg/Bcfg: Add support for 'addp' command.

Thank you for your time!

Regards,
Marvin.

> -----Original Message-----
> From: Carsey, Jaben [mailto:[email protected]]
> Sent: Thursday, May 19, 2016 10:09 PM
> To: Marvin Häuser <[email protected]>; edk2-
> [email protected]
> Cc: Qiu, Shumin <[email protected]>; Carsey, Jaben
> <[email protected]>
> Subject: RE: [edk2] [PATCH v1 1/1] ShellPkg/App: Fix memory leak and save
> resources.
> 
> 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