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

George Danchev danchev at spnet.net
Fri Jul 6 16:13:59 UTC 2012


On Friday 06 July 2012 16:43:07 Thomas Schmitt wrote:
> Hi,

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 [1] 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)
                return TRUE;

        priv->return_status = WEXITSTATUS (status);
        priv->watch = 0;
        priv->pid = 0;

        BRASERO_JOB_LOG (data, "process finished with status %i", WEXITSTATUS 
(status));
...

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)

[1] https://launchpadlibrarian.net/71440716/brasero_log.txt

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



More information about the Pkg-libburnia-devel mailing list