[Pkg-libburnia-devel] Bug#617409: brasero: Brasero corrupts all blank CD-R when burning (was: additional info)

George Danchev danchev at spnet.net
Thu Jul 5 09:57:41 UTC 2012


I'd suggest the attached patch to be applied, so we can better see what 
happens to the growisofs child process.

The code unconditinally calls WEXITSTATUS (status) without making sure that 
WIFEXITED has returned true. This is undefined... but whatever - a separate 
issue. (also I don't actually like brasero_process_watch_child() to be 
utilized like that: g_timeout_add (500, brasero_process_watch_child, process);
but this could be tweaked later)

Reporters, could you please do the following:

apt-get source brasero
apt-get build-dep brasero

put the attached patch in debian/patches/
echo check-child-status >> debian/patches/series


and install this one... then try to reproduce the promlem, and get us the logs 
so we can better see what is going on with our beloved growisofs process.

pub 4096R/0E4BD0AB <people.fccf.net/danchev/key pgp.mit.edu>
-------------- next part --------------

--- brasero-3.4.1.orig/libbrasero-burn/burn-process.c
+++ brasero-3.4.1/libbrasero-burn/burn-process.c
@@ -294,12 +294,27 @@ brasero_process_watch_child (gpointer da
 	 * brasero_job_finished/_error is called before the pipes are closed so
 	 * as to let plugins read stderr / stdout till the end and set a better
 	 * error message or simply decide all went well, in one word override */
-	priv->return_status = WEXITSTATUS (status);
+	priv->return_status =  WEXITSTATUS (status);
 	priv->watch = 0;
 	priv->pid = 0;
+	if (WIFEXITED(status)) { /* WEXITSTATUS macro should only be used if WIFEXITED returned true */
+	        printf("process exited, status=%d\n", WEXITSTATUS(status));
+		priv->return_status = WEXITSTATUS (status);
+		BRASERO_JOB_LOG (data, "process exited with status %d", WEXITSTATUS (status));
+	}
+	else if (WIFSIGNALED(status)) {
+	        printf("process killed by signal %d\n", WTERMSIG(status));
+		BRASERO_JOB_LOG (data, "process killed by signal %d", WTERMSIG(status));
+	}
+	else if (WIFSTOPPED(status)) {
+	        printf("process stopped by signal %d\n", WSTOPSIG(status));
+		BRASERO_JOB_LOG (data, "process stopped by signal %d", WSTOPSIG(status));
+	}
 	BRASERO_JOB_LOG (data, "process finished with status %i", WEXITSTATUS (status));
 	result = brasero_process_finished (data);
 	if (result == BRASERO_BURN_RETRY) {
 		GError *error = NULL;

More information about the Pkg-libburnia-devel mailing list