[Libburn] Re: FYI: my current modifications versus CVS of 8 Dec
scdbackup at gmx.net
scdbackup at gmx.net
Mon Jan 16 03:43:02 PST 2006
Hi,
> > But as said, it is the concept of mandatory bus scan which opens
> > the door for lots of trouble.
>
> Ok. I acknowledge that this is a problem. :)
Sorry for being so insisting.
It's just because i want to end my libburn-0.2.ts fork as
soon as possible. It keeps me from testing your recent
efforts.
> How about I give you a function like...
>
> burn_drive_grab_by_pathname(struct burn_drive *, char *)?
> I could give a function to get the filename of the node a burn_drive *
> refers to as well.
For the needs of cdrskin it would be sufficient.
It would be the straightforward approach, even.
But rather than a new info function i would prefer to get a
struct burn_drive_info refering to a drive list with
a single item.
cdrskin currently depends on struct burn_drive_info members:
location , drive , vendor , product. Possibly i want to access
other burn_drive_info members in future.
Probably it would be better to apply the new gesture at the
level of drive scan and not of drive grab. Like:
burn_drive_scan_single(struct burn_drive_info **, char *)
Drive grabbing would be done by the usual call. If needed.
Alternatively the new grab call could return a struct burn_drive_info .
This would have still the disadvantage that i cannot access
drive properties without grabbing the drive. (cdrskin -checkdrive
currently does not need to grab.)
I have chosen the whitelist concept mainly because it
allowed me to leave the functionality of *_enumerate()
undamaged.
Nevertheless, it might have other useful applications.
Of all remedy ideas i still like this one best. :)
> > I had to reboot after that hwinfo-libburn collision.
>
> The kernel shouldn't have let you do that. Second attempt to access the
> same device should've been blocked...
>
> What interface does hwinfo use?
Interesting question - no idea.
I was not aware that it is dangerous.
It also performed synthetic mouse clicks and i am lucky that
no important original data got damaged ... as far as i can
see and as far as find can find.
I am reluctant to repeat that stunt. I will not perform
hwinfo any more at all. That mouse thing is unbearable.
> I'm rather stunned the drive was left in a state that -reset couldn't
> clear.
It is flatly embarrassing if one has to reboot
in order to regain control over a device.
Not that i would especially blame libburn for that.
I had similar interrupt encounters with cdrecord some
years ago. (Not knowing how it would react today.)
I would hardly ever press CTRL+C on a running cdrecord
unless i planned to reboot anyway.
----------------------------------------------------------------------------
Nevertheless we should strive for better abort behavior
of libburn. I tried to install signal handlers in cdrskin
but could not achieve useable results up to now.
I am unable to end a burn session by something like
burn_drive_cancel()
wait for BURN_DRIVE_IDLE
burn_drive_release()
If i kill cdrskin while performing burn_disc_write()
i get two calls of the signal handler (from two threads ?)
and my call of burn_drive_cancel() obviously does not
work at all. The drive does not get idle.
burn_drive_release() accuses me of violating an assert
condition ("!d->busy") if i perform it while not
BURN_DRIVE_IDLE. The program exits, the drive LED
stays busy, the drive is unejectable.
I have to run cdrecord -abort to get the drive useable
again. This works within about 3 seconds.
Is there an equivalent to cdrecord -abort available within
libburn ? cdrskin could well need such an option.
Anybody knows some kind of tutorial how to deal with signal
handling and threads ?
The only working configuration which i could achieve is
a nearly non-interruptable cdrskin which is a pain in the
ass by itself. You press CTRL+C and it goes on and on
... until it is done on its own. No -abort needed but
a very angry user produced.
Have a nice day :)
Thomas
More information about the libburn
mailing list