NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/60760: lpt(4) concurrency issues
> Thanks, I filed a problem report in gnats to track this:
>
> PR kern/60760: lpt(4) concurrency issues
> https://gnats.NetBSD.org/60760
>
> (Followups to this message, to gnats-bugs%NetBSD.org@localhost with subject line
> `Re: kern/60760: lpt(4) concurrency issues', will get appended to the
> PR, and if you want, I can add you to the notify-list.)
Feel free to do that.
> It's not clear to me that there is any value in allowing concurrent
> lptwrite calls at all.
>
> So rather than try to mitigate the damage of interleaving internal
> data structure updates like that, I'm inclined to just set a flag
> sc->sc_state |= LPT_WRITING while the first lptwrite is in progress,
> to block subsequent attempts to lptwrite until the first one is done.
I agree. If someone relied on writing to the same port concurrently they
would have probably noticed the mangled output by now. Especially since,
now that I think of it, the bug should get worse with slower printers.
Two things, without further looking at the patch:
> +out: if (locked) {
> + sc->sc_state &= LPT_WRITING;
> + wakeup(&sc->sc_state);
> + }
> + splx(s);
I believe you want to clear LPT_WRITING here. You are clearing all other
bits though.
> return 0;
Maybe return error here instead of 0.
Home |
Main Index |
Thread Index |
Old Index