summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg/Universal/SetupBrowserDxe
diff options
context:
space:
mode:
authorEric Dong <eric.dong@intel.com>2015-10-27 07:37:56 +0000
committerydong10 <ydong10@Edk2>2015-10-27 07:37:56 +0000
commitb6f61255260a2e7c06ade9e3d4edb1e8e178f71f (patch)
tree3bb24f501ffa350246d7696f61749fafed67cb37 /MdeModulePkg/Universal/SetupBrowserDxe
parentc00a0c8761584b0eb204c63a0c270e396f43007c (diff)
downloadedk2-b6f61255260a2e7c06ade9e3d4edb1e8e178f71f.tar.gz
edk2-b6f61255260a2e7c06ade9e3d4edb1e8e178f71f.tar.bz2
edk2-b6f61255260a2e7c06ade9e3d4edb1e8e178f71f.zip
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')
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Setup.c29
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Setup.h3
2 files changed, 28 insertions, 4 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);
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
index 81e2a62df1..0abb09cf87 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
@@ -542,7 +542,8 @@ typedef struct {
EFI_QUESTION_ID CurFakeQestId;
BOOLEAN HiiPackageListUpdated;
BOOLEAN FinishRetrieveCall;
- LIST_ENTRY FormHistoryList;
+ LIST_ENTRY FormHistoryList;
+ LIST_ENTRY FormSetList;
} BROWSER_CONTEXT;
#define BROWSER_CONTEXT_FROM_LINK(a) CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE)