From 5ca5d2e34bf35de58e2be09452a4218c5b8725d0 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sat, 6 Nov 2010 13:35:16 +0000 Subject: [PATCH] Declared that isoburn_cancel_prepared_write() waits until iso write thread ends --- ChangeLog | 7 +++++-- libisoburn/libisoburn.h | 1 + xorriso/write_run.c | 19 ++++--------------- xorriso/xorriso_timestamp.h | 2 +- 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f7880d4..0a859d9e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 =============================================================================== diff --git a/libisoburn/libisoburn.h b/libisoburn/libisoburn.h index 286058ed..98444dc2 100644 --- a/libisoburn/libisoburn.h +++ b/libisoburn/libisoburn.h @@ -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. diff --git a/xorriso/write_run.c b/xorriso/write_run.c index bcc40b4e..822425d6 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -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; } } diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 955f0d17..f59abde2 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2010.11.05.144616" +#define Xorriso_timestamP "2010.11.06.133454"