From 061236d4192dedfa8da6fdea83cb12e3802693cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Mon, 27 May 2019 15:50:56 +0200 Subject: [PATCH] scsi_cd: reset io_scheduler and dma_resource on uninit. it seems possible that a file descriptor is still opened after the device is uninited. at least handle properly the situation. help with #15089 Change-Id: I76fb41a8439ab7350ce4d781511aceb6496847c3 Reviewed-on: https://review.haiku-os.org/c/1486 Reviewed-by: Adrien Destugues --- src/add-ons/kernel/drivers/disk/scsi/scsi_cd/scsi_cd.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/add-ons/kernel/drivers/disk/scsi/scsi_cd/scsi_cd.cpp b/src/add-ons/kernel/drivers/disk/scsi/scsi_cd/scsi_cd.cpp index ccb707e78e..36270b8422 100644 --- a/src/add-ons/kernel/drivers/disk/scsi/scsi_cd/scsi_cd.cpp +++ b/src/add-ons/kernel/drivers/disk/scsi/scsi_cd/scsi_cd.cpp @@ -709,6 +709,8 @@ cd_uninit_device(void* _cookie) delete info->io_scheduler; delete info->dma_resource; + info->io_scheduler = NULL; + info->dma_resource = NULL; } @@ -772,6 +774,9 @@ cd_read(void* cookie, off_t pos, void* buffer, size_t* _length) if (status != B_OK) return status; + if (handle->info->io_scheduler == NULL) + return B_DEV_NO_MEDIA; + status = handle->info->io_scheduler->ScheduleRequest(&request); if (status != B_OK) return status; @@ -800,6 +805,9 @@ cd_write(void* cookie, off_t pos, const void* buffer, size_t* _length) if (status != B_OK) return status; + if (handle->info->io_scheduler == NULL) + return B_DEV_NO_MEDIA; + status = handle->info->io_scheduler->ScheduleRequest(&request); if (status != B_OK) return status;