Move code to disconnect all clients to its own routine.

This commit is contained in:
Alexandre Ratchov 2019-08-27 10:10:21 +02:00
parent 9f85e83893
commit 7933511f57
1 changed files with 18 additions and 9 deletions

View File

@ -1108,6 +1108,23 @@ dev_open(struct dev *d)
return 1;
}
/*
* Force all slots to exit
*/
void
dev_exitall(struct dev *d)
{
int i;
struct slot *s;
for (s = d->slot, i = DEV_NSLOT; i > 0; i--, s++) {
if (s->ops)
s->ops->exit(s->arg);
s->ops = NULL;
}
d->slot_list = NULL;
}
/*
* force the device to go in DEV_CFG state, the caller is supposed to
* ensure buffers are drained
@ -1115,9 +1132,6 @@ dev_open(struct dev *d)
void
dev_close(struct dev *d)
{
int i;
struct slot *s;
#ifdef DEBUG
if (log_level >= 3) {
dev_log(d);
@ -1125,12 +1139,7 @@ dev_close(struct dev *d)
}
#endif
d->pstate = DEV_CFG;
for (s = d->slot, i = DEV_NSLOT; i > 0; i--, s++) {
if (s->ops)
s->ops->exit(s->arg);
s->ops = NULL;
}
d->slot_list = NULL;
dev_exitall(d);
dev_sio_close(d);
if (d->mode & MODE_PLAY) {
if (d->encbuf != NULL)