=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sndiod/sock.c,v retrieving revision 1.33 retrieving revision 1.34 diff -c -r1.33 -r1.34 *** src/usr.bin/sndiod/sock.c 2020/03/08 14:52:20 1.33 --- src/usr.bin/sndiod/sock.c 2020/04/25 05:03:54 1.34 *************** *** 1,4 **** ! /* $OpenBSD: sock.c,v 1.33 2020/03/08 14:52:20 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * --- 1,4 ---- ! /* $OpenBSD: sock.c,v 1.34 2020/04/25 05:03:54 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * *************** *** 129,135 **** --- 129,137 ---- void sock_close(struct sock *f) { + struct dev *d; struct sock **pf; + unsigned int tags, i; for (pf = &sock_list; *pf != f; pf = &(*pf)->next) { #ifdef DEBUG *************** *** 154,159 **** --- 156,166 ---- f->slot = NULL; } if (f->midi) { + tags = midi_tags(f->midi); + for (i = 0; i < DEV_NMAX; i++) { + if ((tags & (1 << i)) && (d = dev_bynum(i)) != NULL) + dev_unref(d); + } midi_del(f->midi); f->midi = NULL; } *************** *** 859,864 **** --- 866,873 ---- if (p->devnum < 16) { d = dev_bynum(p->devnum); if (d == NULL) + return 0; + if (!dev_ref(d)) return 0; midi_tag(f->midi, p->devnum); } else if (p->devnum < 32) {