git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2231 6f19259b...
authoryshang1 <yshang1@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Jan 2007 04:02:02 +0000 (04:02 +0000)
committeryshang1 <yshang1@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 12 Jan 2007 04:02:02 +0000 (04:02 +0000)
EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c

index 2871436..efd4f52 100644 (file)
@@ -56,7 +56,7 @@ AcquireRecordBuffer (
     Node = GetFirstNode (&mRecordsBuffer);\r
     RemoveEntryList (Node);\r
 \r
-    Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE);\r
+    Record = _CR (Node, DATAHUB_STATUSCODE_RECORD, Node);\r
   } else {\r
     if (CurrentTpl > EFI_TPL_NOTIFY) {\r
       gBS->RestoreTPL (CurrentTpl);\r
@@ -85,26 +85,36 @@ AcquireRecordBuffer (
 \r
 \r
 /**\r
-  Release a mRecordBuffer entry allocated by AcquirRecordBuffer ().\r
+  Retrieve one record from Records FIFO. The record would be removed from FIFO and \r
+  release to free record buffer.\r
 \r
-  @param   Record        Point to record buffer which is acquired by AcquirRecordBuffer()\r
+  @return   !NULL   Point to record, which is ready to be logged.\r
+  @return   NULL    the FIFO of record is empty.\r
  \r
 **/\r
-VOID\r
-FreeRecordBuffer (\r
-  IN  DATAHUB_STATUSCODE_RECORD  *Record\r
+DATAHUB_STATUSCODE_RECORD *\r
+RetrieveRecord (\r
+  VOID\r
   )\r
 {\r
-  EFI_TPL  CurrentTpl;\r
-\r
-  ASSERT (Record != NULL);\r
+  DATAHUB_STATUSCODE_RECORD   *Record = NULL;\r
+  LIST_ENTRY                  *Node;\r
+  EFI_TPL                     CurrentTpl;\r
 \r
   CurrentTpl = gBS->RaiseTPL (EFI_TPL_HIGH_LEVEL);\r
 \r
-  RemoveEntryList (&Record->Node);\r
-  InsertTailList (&mRecordsBuffer, &Record->Node);\r
+  if (!IsListEmpty (&mRecordsFifo)) {\r
+    Node = GetFirstNode (&mRecordsFifo);\r
+    Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE);\r
+\r
+    RemoveEntryList (&Record->Node);\r
+    InsertTailList (&mRecordsBuffer, &Record->Node);\r
+    Record->Signature = 0;\r
+  }\r
 \r
   gBS->RestoreTPL (CurrentTpl);\r
+\r
+  return Record;\r
 }\r
 \r
 \r
@@ -229,20 +239,16 @@ LogDataHubEventCallBack (
   DATAHUB_STATUSCODE_RECORD         *Record;\r
   UINT32                            Size;\r
   UINT64                            DataRecordClass;\r
-  LIST_ENTRY                        *Node;\r
-  EFI_TPL                           CurrentTpl;\r
 \r
   //\r
   // Log DataRecord in Data Hub.\r
   // Journal records fifo to find all record entry.\r
   //\r
-  //\r
-  CurrentTpl = gBS->RaiseTPL (EFI_TPL_HIGH_LEVEL);\r
-\r
-  for (Node = mRecordsFifo.ForwardLink; Node != &mRecordsFifo;) {\r
-    Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE);\r
-    Node   = Node->ForwardLink;\r
-\r
+  while (1) {\r
+    Record = RetrieveRecord ();\r
+    if (Record == NULL) {\r
+      break;\r
+    }\r
     //\r
     // Add in the size of the header we added.\r
     //\r
@@ -277,12 +283,7 @@ LogDataHubEventCallBack (
                         Size\r
                         );\r
 \r
-\r
-\r
-    FreeRecordBuffer (Record);\r
   }\r
-\r
-  gBS->RestoreTPL (CurrentTpl);\r
 }\r
 \r
 \r