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) SVN trunk (to become libisoburn-0.6.6.pl00.tar.gz)
=============================================================================== ===============================================================================
libisoburn novelties: libisoburn novelties:
- none yet - * New API calls isoburn_igopt_set_disc_label(), isoburn_igopt_get_disc_label()
xorriso novelties: 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 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 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 either run isoburn_disc_write() or to revoke the preparations by the
call described here. call described here.
If this call returns 0 or 1 then the write thread of libisofs has ended.
@since 0.1.0 @since 0.1.0
@param input_drive The drive resp. in_drive which was used with the @param input_drive The drive resp. in_drive which was used with the
preparation call. preparation call.

View File

@ -998,8 +998,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
int flag) int flag)
{ {
int ret, size, free_bytes, i, aborting= 0, emul, buffer_fill= 50, last_sector; 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_wait_counter= 0, iso_cancel_limit= 5;
int iso_cancelled= 0;
struct burn_progress progress; struct burn_progress progress;
char *status_text, date_text[80], *speed_unit, mem_text[8]; char *status_text, date_text[80], *speed_unit, mem_text[8];
enum burn_drive_status drive_status; 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); drive_status= burn_drive_get_status(drive, &progress);
if(drive_status == BURN_DRIVE_IDLE) { if(drive_status == BURN_DRIVE_IDLE) {
/* To avoid a race condition between burn_source and libisofs /* To avoid a race condition between burn_source and libisofs
writer thread: Wait for ISO generator thread to have finished. 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) if(image == NULL)
break; break;
if(!iso_image_generator_is_running(image)) if(!iso_image_generator_is_running(image))
break; break;
iso_wait_counter++; 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); 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; break;
} }
} }

View File

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