From: ratchov Date: Fri, 29 Jan 2021 10:55:19 +0000 (+0000) Subject: Move the control client state out of the device structure X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=e5be4cb83d673e6eef368bb655a175ac13d1f967;p=openbsd Move the control client state out of the device structure No behavior change. Later this will ease changing the controlled device by "just" swapping pointers. --- diff --git a/usr.bin/sndiod/dev.c b/usr.bin/sndiod/dev.c index a221558f512..83e577f7fa1 100644 --- a/usr.bin/sndiod/dev.c +++ b/usr.bin/sndiod/dev.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dev.c,v 1.84 2021/01/29 10:51:24 ratchov Exp $ */ +/* $OpenBSD: dev.c,v 1.85 2021/01/29 10:55:19 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * @@ -109,6 +109,7 @@ struct slotops zomb_slotops = { struct dev *dev_list = NULL; unsigned int dev_sndnum = 0; +struct ctlslot ctlslot_array[DEV_NCTLSLOT]; struct slot slot_array[DEV_NSLOT]; unsigned int slot_serial; /* for slot allocation */ @@ -1033,7 +1034,6 @@ dev_new(char *path, struct aparams *par, unsigned int rate, unsigned int hold, unsigned int autovol) { struct dev *d; - unsigned int i; if (dev_sndnum == DEV_NMAX) { if (log_level >= 1) @@ -1066,12 +1066,6 @@ dev_new(char *path, struct aparams *par, d->autovol = autovol; d->refcnt = 0; d->pstate = DEV_CFG; - for (i = 0; i < DEV_NCTLSLOT; i++) { - d->ctlslot[i].ops = NULL; - d->ctlslot[i].dev = d; - d->ctlslot[i].mask = 0; - d->ctlslot[i].mode = 0; - } d->slot_list = NULL; d->master = MIDI_MAXCTL; d->mtc.origin = 0; @@ -1285,7 +1279,9 @@ dev_abort(struct dev *d) } d->slot_list = NULL; - for (c = d->ctlslot, i = DEV_NCTLSLOT; i > 0; i--, c++) { + for (c = ctlslot_array, i = DEV_NCTLSLOT; i > 0; i--, c++) { + if (c->dev != d) + continue; if (c->ops) c->ops->exit(c->arg); c->ops = NULL; @@ -2320,7 +2316,7 @@ ctlslot_new(struct dev *d, struct ctlops *ops, void *arg) for (;;) { if (i == DEV_NCTLSLOT) return NULL; - s = d->ctlslot + i; + s = ctlslot_array + i; if (s->ops == NULL) break; i++; @@ -2425,7 +2421,7 @@ dev_addctl(struct dev *d, char *gstr, int type, int addr, c->refs_mask = 0; for (i = 0; i < DEV_NCTLSLOT; i++) { c->refs_mask |= CTL_DEVMASK; - if (d->ctlslot[i].ops != NULL) + if (ctlslot_array[i].ops != NULL) c->refs_mask |= 1 << i; } for (pc = &d->ctl_list; *pc != NULL; pc = &(*pc)->next) @@ -2511,8 +2507,8 @@ dev_ctlsync(struct dev *d) "output", -1, "level", NULL, -1, 127, d->master); } - for (s = d->ctlslot, i = DEV_NCTLSLOT; i > 0; i--, s++) { - if (s->ops) + for (s = ctlslot_array, i = DEV_NCTLSLOT; i > 0; i--, s++) { + if (s->dev == d && s->ops) s->ops->sync(s->arg); } } diff --git a/usr.bin/sndiod/dev.h b/usr.bin/sndiod/dev.h index d06e7f00978..81150bd9a4b 100644 --- a/usr.bin/sndiod/dev.h +++ b/usr.bin/sndiod/dev.h @@ -1,4 +1,4 @@ -/* $OpenBSD: dev.h,v 1.32 2021/01/29 10:51:24 ratchov Exp $ */ +/* $OpenBSD: dev.h,v 1.33 2021/01/29 10:55:19 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * @@ -32,6 +32,11 @@ */ #define DEV_NSLOT 8 +/* + * preallocated control clients + */ +#define DEV_NCTLSLOT 8 + /* * audio stream state structure */ @@ -258,12 +263,11 @@ struct dev { */ struct ctl *ctl_list; -#define DEV_NCTLSLOT 8 - struct ctlslot ctlslot[DEV_NCTLSLOT]; }; extern struct dev *dev_list; extern struct slot slot_array[DEV_NSLOT]; +extern struct ctlslot ctlslot_array[DEV_NCTLSLOT]; void slot_array_init(void); diff --git a/usr.bin/sndiod/sock.c b/usr.bin/sndiod/sock.c index c7cdc7b9c3b..9ed2e66edd6 100644 --- a/usr.bin/sndiod/sock.c +++ b/usr.bin/sndiod/sock.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sock.c,v 1.37 2021/01/29 10:51:24 ratchov Exp $ */ +/* $OpenBSD: sock.c,v 1.38 2021/01/29 10:55:19 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * @@ -114,7 +114,7 @@ sock_log(struct sock *f) midi_log(f->midi); else if (f->ctlslot) { log_puts("ctlslot"); - log_putu(f->ctlslot - f->ctlslot->dev->ctlslot); + log_putu(f->ctlslot - ctlslot_array); } else log_puts("sock"); #ifdef DEBUG