diff options
author | Eric Dong <eric.dong@intel.com> | 2015-10-27 07:37:56 +0000 |
---|---|---|
committer | ydong10 <ydong10@Edk2> | 2015-10-27 07:37:56 +0000 |
commit | b6f61255260a2e7c06ade9e3d4edb1e8e178f71f (patch) | |
tree | 3bb24f501ffa350246d7696f61749fafed67cb37 /MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | |
parent | c00a0c8761584b0eb204c63a0c270e396f43007c (diff) | |
download | edk2-platforms-b6f61255260a2e7c06ade9e3d4edb1e8e178f71f.tar.xz |
MdeModulePkg SetupBrowserDxe: Save global variable values before nest function called.
The SendForm function can be called nest in it. This function also uses some global variables. So we must save global variable values before it been called again.
Checked in the missing change for gBrowserFormSetList.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18681 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/SetupBrowserDxe/Setup.c')
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c index 4a6758a5e4..cc9896959b 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c @@ -5541,8 +5541,9 @@ SaveBrowserContext ( VOID
)
{
- BROWSER_CONTEXT *Context;
- FORM_ENTRY_INFO *MenuList;
+ BROWSER_CONTEXT *Context;
+ FORM_ENTRY_INFO *MenuList;
+ FORM_BROWSER_FORMSET *FormSet;
gBrowserContextCount++;
if (gBrowserContextCount == 1) {
@@ -5585,6 +5586,17 @@ SaveBrowserContext ( }
//
+ // Save formset list.
+ //
+ InitializeListHead(&Context->FormSetList);
+ while (!IsListEmpty (&gBrowserFormSetList)) {
+ FormSet = FORM_BROWSER_FORMSET_FROM_LINK (gBrowserFormSetList.ForwardLink);
+ RemoveEntryList (&FormSet->Link);
+
+ InsertTailList(&Context->FormSetList, &FormSet->Link);
+ }
+
+ //
// Insert to FormBrowser context list
//
InsertHeadList (&gBrowserContextList, &Context->Link);
@@ -5602,7 +5614,8 @@ RestoreBrowserContext ( {
LIST_ENTRY *Link;
BROWSER_CONTEXT *Context;
- FORM_ENTRY_INFO *MenuList;
+ FORM_ENTRY_INFO *MenuList;
+ FORM_BROWSER_FORMSET *FormSet;
ASSERT (gBrowserContextCount != 0);
gBrowserContextCount--;
@@ -5645,6 +5658,16 @@ RestoreBrowserContext ( }
//
+ // Restore the Formset data.
+ //
+ while (!IsListEmpty (&Context->FormSetList)) {
+ FormSet = FORM_BROWSER_FORMSET_FROM_LINK (Context->FormSetList.ForwardLink);
+ RemoveEntryList (&FormSet->Link);
+
+ InsertTailList(&gBrowserFormSetList, &FormSet->Link);
+ }
+
+ //
// Remove from FormBrowser context list
//
RemoveEntryList (&Context->Link);
|