DF-4283 / fix.diff
--- a/sys/dev/sound/midi/midi.c +++ b/sys/dev/sound/midi/midi.c @@ -185,7 +185,8 @@ static d_open_t midistat_open; static d_close_t midistat_close; static d_read_t midistat_read; -static void midi_filter_detach(struct knote *); +static void midi_filter_detach_read(struct knote *); +static void midi_filter_detach_write(struct knote *); static int midi_filter_read(struct knote *, long); static int midi_filter_write(struct knote *, long); @@ -196,9 +197,9 @@ static struct dev_ops midistat_ops = { }; static struct filterops midi_read_filterops = - { FILTEROP_ISFD, NULL, midi_filter_detach, midi_filter_read }; + { FILTEROP_ISFD, NULL, midi_filter_detach_read, midi_filter_read }; static struct filterops midi_write_filterops = - { FILTEROP_ISFD, NULL, midi_filter_detach, midi_filter_write }; + { FILTEROP_ISFD, NULL, midi_filter_detach_write, midi_filter_write }; /* * /dev/rmidi dev_t declarations, struct variable access is protected by @@ -930,15 +931,19 @@ midi_kqfilter(struct dev_kqfilter_args *ap) } static void -midi_filter_detach(struct knote *kn) +midi_filter_detach_read(struct knote *kn) { struct snd_midi *m = (struct snd_midi *)kn->kn_hook; - struct klist *rklist = &m->rkq.ki_note; - struct klist *wklist = &m->wkq.ki_note; - knote_remove(rklist, kn); - knote_remove(wklist, kn); + knote_remove(&m->rkq.ki_note, kn); +} + +static void +midi_filter_detach_write(struct knote *kn) +{ + struct snd_midi *m = (struct snd_midi *)kn->kn_hook; + + knote_remove(&m->wkq.ki_note, kn); } static int |