From 8e171c89a6339be5cd5f1d10cb9a805ee473efa6 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 7 Sep 2007 15:50:31 +0000 Subject: [PATCH] Made burn_drive_scan() refuse work on non-empty drive list. --- cdrskin/cdrskin_timestamp.h | 2 +- libburn/async.c | 3 ++- libburn/drive.c | 8 ++++++-- libburn/drive.h | 3 ++- libburn/init.c | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 7628aaa..89d1ff3 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2007.09.07.123748" +#define Cdrskin_timestamP "2007.09.07.154951" diff --git a/libburn/async.c b/libburn/async.c index 29cc070..ea61710 100644 --- a/libburn/async.c +++ b/libburn/async.c @@ -175,7 +175,8 @@ drive_is_active:; /* ts A61007 : test moved up from burn_drive_scan_sync() was burn_wait_all() */ - if (!burn_drives_are_clear()) + /* ts A70907 : now demanding freed drives, not only released */ + if (!burn_drives_are_clear(1)) goto drive_is_active; *drives = NULL; *n_drives = 0; diff --git a/libburn/drive.c b/libburn/drive.c index 2d47b76..e011ddc 100644 --- a/libburn/drive.c +++ b/libburn/drive.c @@ -445,7 +445,8 @@ void burn_drive_release(struct burn_drive *d, int le) /* ts A61007 : former void burn_wait_all() */ -int burn_drives_are_clear(void) +/* @param flag bit0= demand freed drives (else released drives) */ +int burn_drives_are_clear(int flag) { int i; @@ -453,7 +454,7 @@ int burn_drives_are_clear(void) /* ts A60904 : ticket 62, contribution by elmom */ if (drive_array[i].global_index == -1) continue; - if (drive_array[i].released) + if (drive_array[i].released && !(flag & 1)) continue; return 0; } @@ -798,6 +799,9 @@ int burn_drive_scan_sync(struct burn_drive_info *drives[], state */ #endif /* 0 */ + /* ts A70907 : moved here from burn_drive_info_free() */ + burn_drive_free_all(); + /* refresh the lib's drives */ /* ts A61115 : formerly sg_enumerate(); ata_enumerate(); */ diff --git a/libburn/drive.h b/libburn/drive.h index 2c14cd6..7f9280f 100644 --- a/libburn/drive.h +++ b/libburn/drive.h @@ -43,7 +43,8 @@ unsigned int burn_drive_count(void); /* ts A61007 */ /* void burn_wait_all(void); */ -int burn_drives_are_clear(void); +/* @param flag bit0= demand freed drives (else released drives) */ +int burn_drives_are_clear(int flag); int burn_sector_length_write(struct burn_drive *d); int burn_track_control(struct burn_drive *d, int); diff --git a/libburn/init.c b/libburn/init.c index 7edb981..3504084 100644 --- a/libburn/init.c +++ b/libburn/init.c @@ -107,7 +107,7 @@ void burn_finish(void) /* ts A61007 */ /* burn_wait_all(); */ - if (!burn_drives_are_clear()) { + if (!burn_drives_are_clear(0)) { libdax_msgs_submit(libdax_messenger, -1, 0x00020107, LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, "Drive is busy on attempt to shut down library", 0, 0);