]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/UefiScsiLib/UefiScsiLib.c
MdePkg UefiScsiLib: Close event when SCSI command fails
[mirror_edk2.git] / MdePkg / Library / UefiScsiLib / UefiScsiLib.c
index d8babcee406a6232a3ee6e10c3119c51d047591d..0a08e4468ed0002489bf8a8c36732dd0bb4ad6d3 100644 (file)
@@ -1494,7 +1494,17 @@ ScsiRead10CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r
@@ -1668,7 +1678,17 @@ ScsiWrite10CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r
@@ -1842,7 +1862,17 @@ ScsiRead16CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r
@@ -2016,7 +2046,17 @@ ScsiWrite16CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r