[haiku-commits] haiku: hrev43392 - src/add-ons/kernel/busses/scsi/ahci

  • From: mmlr@xxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 3 Dec 2011 22:55:46 +0100 (CET)

hrev43392 adds 1 changeset to branch 'master'
old head: e6f22646a34d4f25729b547891c98e71a9d6ecff
new head: 44954094997c3f1e7ceb8c9826768b679f87152d

----------------------------------------------------------------------------

4495409: Abort the request instead of crashing when out of memory.

                                            [ Michael Lotz <mmlr@xxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev43392
Commit:      44954094997c3f1e7ceb8c9826768b679f87152d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=4495409
Author:      Michael Lotz <mmlr@xxxxxxxx>
Date:        Sat Dec  3 21:51:36 2011 UTC

----------------------------------------------------------------------------

1 files changed, 19 insertions(+), 0 deletions(-)
src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp |   19 +++++++++++++++++

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp 
b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp
index 43637e9..4d4f7be 100644
--- a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp
+++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp
@@ -659,6 +659,13 @@ AHCIPort::ScsiSynchronizeCache(scsi_ccb *request)
        //TRACE("AHCIPort::ScsiSynchronizeCache port %d\n", fIndex);
 
        sata_request *sreq = new(std::nothrow) sata_request(request);
+       if (sreq == NULL) {
+               TRACE("out of memory when allocating sync request\n");
+               request->subsys_status = SCSI_REQ_ABORTED;
+               gSCSI->finished(request, 1);
+               return;
+       }
+
        sreq->set_ata_cmd(fUse48BitCommands ? 0xea : 0xe7); // Flush Cache
        ExecuteSataRequest(sreq);
 }
@@ -716,6 +723,11 @@ AHCIPort::ScsiReadWrite(scsi_ccb *request, uint64 lba, 
size_t sectorCount,
 
        ASSERT(request->data_length == sectorCount * 512);
        sata_request *sreq = new(std::nothrow) sata_request(request);
+       if (sreq == NULL) {
+               TRACE("out of memory when allocating read/write request\n");
+               request->subsys_status = SCSI_REQ_ABORTED;
+               gSCSI->finished(request, 1);
+       }
 
        if (fUse48BitCommands) {
                if (sectorCount > 65536) {
@@ -858,6 +870,13 @@ AHCIPort::ScsiExecuteRequest(scsi_ccb *request)
 //             TRACE("AHCIPort::ScsiExecuteRequest ATAPI: port %d, opcode 
0x%02x, length %u\n", fIndex, request->cdb[0], request->cdb_length);
 
                sata_request *sreq = new(std::nothrow) sata_request(request);
+               if (sreq == NULL) {
+                       TRACE("out of memory when allocating atapi request\n");
+                       request->subsys_status = SCSI_REQ_ABORTED;
+                       gSCSI->finished(request, 1);
+                       return;
+               }
+
                sreq->set_atapi_cmd(request->data_length);
 //             uint8 *data = (uint8*) sreq->ccb()->cdb;
 //             for (int i = 0; i < 16; i += 8) {


Other related posts:

  • » [haiku-commits] haiku: hrev43392 - src/add-ons/kernel/busses/scsi/ahci - mmlr