=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sndiod/sock.c,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** src/usr.bin/sndiod/sock.c 2012/11/30 20:30:24 1.2 --- src/usr.bin/sndiod/sock.c 2012/11/30 20:48:00 1.3 *************** *** 1,4 **** ! /* $OpenBSD: sock.c,v 1.2 2012/11/30 20:30:24 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * --- 1,4 ---- ! /* $OpenBSD: sock.c,v 1.3 2012/11/30 20:48:00 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * *************** *** 151,156 **** --- 151,160 ---- midi_del(f->midi); f->midi = NULL; } + if (f->port) { + port_unref(f->port); + f->port = NULL; + } file_del(f->file); close(f->fd); xfree(f); *************** *** 850,855 **** --- 854,860 ---- } f->pstate = SOCK_INIT; if (mode & MODE_MIDIMASK) { + f->port = NULL; f->slot = NULL; f->midi = midi_new(&sock_midiops, f, mode); if (f->midi == NULL) *************** *** 864,871 **** midi_tag(f->midi, p->devnum); } else if (p->devnum < 48) { c = port_bynum(p->devnum - 32); ! if (c == NULL) return 0; midi_link(f->midi, c->midi); } else return 0; --- 869,877 ---- midi_tag(f->midi, p->devnum); } else if (p->devnum < 48) { c = port_bynum(p->devnum - 32); ! if (c == NULL || !port_ref(c)) return 0; + f->port = c; midi_link(f->midi, c->midi); } else return 0;