[Pkg-libburnia-devel] Bug#617409: brasero: Brasero corrupts all blank CD-R when burning (was: additional info)
danchev at spnet.net
Fri Jul 6 16:13:59 UTC 2012
On Friday 06 July 2012 16:43:07 Thomas Schmitt wrote:
Thomas, thank you performing these tests.
I think you've done enough already :)
> in order to apply George's patch anyway, i have tried to disable
> libburn so that growisofs would be used with DVD.
> No success.
> Both, growisofs and libburn are enabled but also greyed, so that i
> cannot change their checkboxes.
Hm, did you try to mess up with gconf-editor (package of the same name)?
You can start it, and search for brasero string, that is Ctrl+F... then find
brasero/config/priorities and adjust the weights of growisofs and libisofs
plugins, so these being higher than the rest. It is not like I'm an expert in
this particlar area:P
> Whatever, just in case it brings any new insight:
> $ cd brasero-2.30.3
> $ mv ~/check-child-status debian/patches/check-child-status
> $ echo check-child-status >> debian/patches/series
> $ dpkg-buildpackage
> ... time enough for a tea break ...
> # apt-get --purge remove brasero
> # apt-get install libbrasero-media0
> # dpkg -i brasero_2.30.3-2_amd64.deb
> $ brasero &
> Well, it still burns readable DVD.
> How to get a log file ?
> Just try burning another DVD, fail, and get offered to save a log.
Hm, uses libburn and libisofs and you observed a fail?
> Life is so easy ... :))
> It still uses libburn, not growisofs.
> But no further insight:
> + BRASERO_JOB_LOG (data, "process exited with status %d",
> WEXITSTATUS (status)); + BRASERO_JOB_LOG (data, "process
> killed by signal %d", WTERMSIG(status)); + BRASERO_JOB_LOG
> (data, "process stopped by signal %d", WSTOPSIG(status));
> The word "process" does not appear in the log of the failed run.
> It did not get that far, i assume.
> > + printf("process exited, status=%d\n",
> > WEXITSTATUS(status)); + printf("process killed by signal
> > %d\n", WTERMSIG(status)); + printf("process stopped by
> > signal %d\n", WSTOPSIG(status));
> Nothing to see of those in xterm where i started brasero.
> Not with the successful runs either.
As I get it from the code brasero_process_watch_child() routine, containing
those prints, would only be called when external applications like growisofs
are being started in the child process (there are also routines to read their
stdout and stderr). Hence, there is no chance to see them in your
libburn+libisofs test above.
OTOH, in the log file  where growisofs was engaged you can see:
"BraseroGrowisofs process finished with status 0"
which is spitted by the original routine brasero_process_watch_child()
if (waitpid (priv->pid, &status, WNOHANG) <= 0)
priv->return_status = WEXITSTATUS (status);
priv->watch = 0;
priv->pid = 0;
BRASERO_JOB_LOG (data, "process finished with status %i", WEXITSTATUS
and where is it not actually wait()'ed properly, since the waitpid() could
have returned positive value (child's pid) due to the child's change of state,
e.g. child being signalled for any (obscure) reason (SIGPIPE, SIGKILL, etc),
and also child's exit status is being blindly "examined" by flat
WEXITSTATUS(status), instead of first checking WIFEXITED(status) for returning
true, i.e. that the child has actually exited. Thus, the above log message of
"process finished with status 0" is pretty much bogus in this particular case
shown in the log with the burn failure halfway around ~49-50%. (see the tail
of waitpid(2) for a good example of a diligent parent waiting for their
possibly naughty child)
pub 4096R/0E4BD0AB <people.fccf.net/danchev/key pgp.mit.edu>
More information about the Pkg-libburnia-devel