Declared that isoburn_cancel_prepared_write() waits until iso write thread ends

This commit is contained in:
Thomas Schmitt 2010-11-06 13:35:16 +00:00
parent 64e43541db
commit 5ca5d2e34b
4 changed files with 11 additions and 18 deletions

View File

@ -1,9 +1,12 @@
SVN trunk (to become libisoburn-0.6.6.pl00.tar.gz)
===============================================================================
libisoburn novelties:
- none yet -
* New API calls isoburn_igopt_set_disc_label(), isoburn_igopt_get_disc_label()
xorriso novelties:
- none yet -
* Bug fix: -as mkisofs -print-size printed the size but also produced ISO image
* Build problem fix on Linux 2.4 in GNU xorriso libjte/checksum.c
* New -as mkisofs option -joliet-long
* New bootspec sparc_label=, new -as mkisofs options -sparc-boot , -sparc-label
libisoburn-0.6.4.pl00.tar.gz Tue Oct 26 2010
===============================================================================

View File

@ -1724,6 +1724,7 @@ int isoburn_prepare_blind_grow(struct burn_drive *in_drive,
image stream when one of above three calls is performed. It is mandatory to
either run isoburn_disc_write() or to revoke the preparations by the
call described here.
If this call returns 0 or 1 then the write thread of libisofs has ended.
@since 0.1.0
@param input_drive The drive resp. in_drive which was used with the
preparation call.

View File

@ -998,8 +998,7 @@ 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= 20;
int iso_cancelled= 0;
int iso_wait_counter= 0, iso_cancel_limit= 5;
struct burn_progress progress;
char *status_text, date_text[80], *speed_unit, mem_text[8];
enum burn_drive_status drive_status;
@ -1037,28 +1036,18 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
drive_status= burn_drive_get_status(drive, &progress);
if(drive_status == BURN_DRIVE_IDLE) {
/* To avoid a race condition between burn_source and libisofs
writer thread: Wait for ISO generator thread to have finished.
After some seconds kick it by isoburn_cancel_prepared_write()
which waits for the write thread to end.
*/
if(image == NULL)
break;
if(!iso_image_generator_is_running(image))
break;
iso_wait_counter++;
if(iso_wait_counter > iso_cancel_limit && !iso_cancelled) {
if(iso_wait_counter > iso_cancel_limit) {
isoburn_cancel_prepared_write(drive, NULL, 0);
iso_cancelled= 1;
} else if(iso_wait_counter > iso_break_limit) {
/* >>> This can be dangerous. xorriso will free memory objects which
might be in use in the unstoppable libisofs thread.
The current implementation of ecma119.c:bs_cancel() seems to
wait for the writer thread to end. Probably one should make
this a part of the libisofs API specs and break the loop
directly after isoburn_cancel_prepared_write().
*/
break;
}
}

View File

@ -1 +1 @@
#define Xorriso_timestamP "2010.11.05.144616"
#define Xorriso_timestamP "2010.11.06.133454"