--- brasero-3.4.1.orig/libbrasero-burn/burn-process.c
+++ brasero-3.4.1/libbrasero-burn/burn-process.c
@@ -294,12 +294,40 @@ 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 */
+		priv->return_status = WEXITSTATUS (status);
+		BRASERO_JOB_LOG (data, "child process exited with status %d", WEXITSTATUS (status));
+	}
+	else if (WIFSIGNALED(status)) { /* there is no meaningful child return status */
+		int errsv = errno; /* unrecoverable error */
+		priv->error = g_error_new (BRASERO_BURN_ERROR, BRASERO_BURN_ERROR_GENERAL,
+			_("child process killed by signal %d. Error (%s)"), WTERMSIG(status), g_strerror (errsv));
+		BRASERO_JOB_LOG (data, "child process killed by signal %d", WTERMSIG(status));
+		return FALSE; /* not to be called by g_timeout_add() anymore */
+	}
+	else if (WIFSTOPPED(status)) { /* there is no meaningful child return status */
+		int errsv = errno; /* unrecoverable error or maybe try to send SIGCONT to the child? */
+		priv->error = g_error_new (BRASERO_BURN_ERROR, BRASERO_BURN_ERROR_GENERAL,
+			_("child process stopped by signal %d. Error (%s)"), WSTOPSIG(status), g_strerror (errsv));
+		BRASERO_JOB_LOG (data, "child process stopped by signal %d", WSTOPSIG(status));
+		return FALSE; /* not to be called by g_timeout_add() anymore */
+	}
+	else {
+		int errsv = errno; /* unrecoverable error */
+		priv->error = g_error_new (BRASERO_BURN_ERROR, BRASERO_BURN_ERROR_GENERAL,
+			_("child process unhandled Error (%s)"), g_strerror (errsv));
+		BRASERO_JOB_LOG (data, "child process unhandled Error (%s)", g_strerror (errsv));
+		return FALSE; /* not to be called by g_timeout_add() anymore */
+	}
+   
+/*
 	BRASERO_JOB_LOG (data, "process finished with status %i", WEXITSTATUS (status));
-
+*/
 	result = brasero_process_finished (data);
 	if (result == BRASERO_BURN_RETRY) {
 		GError *error = NULL;
