Avoiding potential endless write pacifier loop. Introduced with rev 3432.

This commit is contained in:
2010-10-19 17:07:21 +00:00
parent ae886b6154
commit 47d6c59b26
3 changed files with 23 additions and 4 deletions

View File

@ -987,6 +987,8 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
int flag)
{
int ret, size, free_bytes, i, aborting= 0, emul, buffer_fill= 50, last_sector;
int iso_wait_counter= 0, iso_cancel_limit= 5, iso_break_limit= 10;
int iso_cancelled= 0;
struct burn_progress progress;
char *status_text, date_text[80], *speed_unit, mem_text[8];
enum burn_drive_status drive_status;
@ -1030,8 +1032,21 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
*/
if(image == NULL)
break;
if(!iso_image_generator_is_running(image))
if(!iso_image_generator_is_running(image)) {
break;
} else if(iso_wait_counter > iso_cancel_limit && !iso_cancelled) {
/* >>> cancel image burn source */;
iso_cancelled= 1;
} else if(iso_wait_counter > iso_break_limit) {
/* >>> This is dangerous. xorriso will free memory objects which might
be in use in the unstoppable libisofs thread.
*/
break;
}
}
current_time= Sfile_microtime(0);
if(drive_status == BURN_DRIVE_WRITING && progress.sectors > 0) {

View File

@ -1 +1 @@
#define Xorriso_timestamP "2010.10.19.104814"
#define Xorriso_timestamP "2010.10.19.170704"