//\r
UINTN EncapsulatedStreamHandle;\r
EFI_GUID *EncapsulationGuid;\r
+ //\r
+ // If the section REQUIRES an extraction protocol, register for RPN \r
+ // when the required GUIDed extraction protocol becomes available.\r
+ //\r
+ EFI_EVENT Event;\r
} CORE_SECTION_CHILD_NODE;\r
\r
#define CORE_SECTION_STREAM_SIGNATURE SIGNATURE_32('S','X','S','S')\r
CORE_SECTION_CHILD_NODE *ChildNode;\r
CORE_SECTION_STREAM_NODE *ParentStream;\r
VOID *Registration;\r
- EFI_EVENT Event;\r
} RPN_EVENT_CONTEXT;\r
\r
\r
// Close the event when done.\r
//\r
gBS->CloseEvent (Event);\r
+ Context->ChildNode->Event = NULL;\r
FreePool (Context);\r
} \r
\r
Context->ChildNode = ChildNode;\r
Context->ParentStream = ParentStream;\r
\r
- Context->Event = EfiCreateProtocolNotifyEvent (\r
- Context->ChildNode->EncapsulationGuid,\r
- TPL_NOTIFY,\r
- NotifyGuidedExtraction,\r
- Context,\r
- &Context->Registration\r
- );\r
+ Context->ChildNode->Event = EfiCreateProtocolNotifyEvent (\r
+ Context->ChildNode->EncapsulationGuid,\r
+ TPL_NOTIFY,\r
+ NotifyGuidedExtraction,\r
+ Context,\r
+ &Context->Registration\r
+ );\r
}\r
\r
/**\r
//\r
// Allocate a new node\r
//\r
- *ChildNode = AllocatePool (sizeof (CORE_SECTION_CHILD_NODE));\r
+ *ChildNode = AllocateZeroPool (sizeof (CORE_SECTION_CHILD_NODE));\r
Node = *ChildNode;\r
if (Node == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
//\r
CloseSectionStream (ChildNode->EncapsulatedStreamHandle);\r
}\r
+\r
+ if (ChildNode->Event != NULL) {\r
+ gBS->CloseEvent (ChildNode->Event);\r
+ }\r
+\r
//\r
// Last, free the child node itself\r
//\r