Browse Source

enable proper removal of slave drivers which fail to start

some comments fixed up.

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@4401 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.121.0
torben 14 years ago
parent
commit
fe66547ea2
2 changed files with 23 additions and 11 deletions
  1. +2
    -0
      jack/engine.h
  2. +21
    -11
      jackd/engine.c

+ 2
- 0
jack/engine.h View File

@@ -260,5 +260,7 @@ jack_engine_signal_problems (jack_engine_t* engine);

int
jack_drivers_start (jack_engine_t *engine);
int
jack_add_slave_driver (jack_engine_t *engine, struct _jack_driver *driver);

#endif /* __jack_engine_h__ */

+ 21
- 11
jackd/engine.c View File

@@ -2120,17 +2120,33 @@ jack_engine_freewheel (void *arg)
return 0;
}

static void
jack_slave_driver_remove(jack_engine_t *engine, jack_driver_t *sdriver)
{
sdriver->detach (sdriver, engine);
engine->slave_drivers = jack_slist_remove(engine->slave_drivers, sdriver);

jack_driver_unload(sdriver);
}
int
jack_drivers_start (jack_engine_t *engine)
{
JSList *node;
JSList *failed_drivers = NULL;
/* first start the slave drivers */
for (node=engine->slave_drivers; node; node=jack_slist_next(node))
{
jack_driver_t *sdriver = node->data;
sdriver->start( sdriver );
if (sdriver->start( sdriver ))
failed_drivers = jack_slist_append(failed_drivers, sdriver);
}

//XXX: need to remove driver which fail to start
// Clean up drivers which failed to start.
for (node=failed_drivers; node; node=jack_slist_next(node))
{
jack_driver_t *sdriver = node->data;
jack_error( "slave driver %s failed to start, removing it", sdriver->internal_client->control->name );
jack_slave_driver_remove(engine, sdriver);
}

/* now the master driver is started */
@@ -2149,8 +2165,6 @@ jack_drivers_stop (jack_engine_t *engine)
{
jack_driver_t *sdriver = node->data;
sdriver->stop( sdriver );

//XXX: need to remove driver which fail to start
}

return retval;
@@ -2160,16 +2174,14 @@ static int
jack_drivers_read (jack_engine_t *engine, jack_nframes_t nframes)
{
JSList *node;
/* first start the slave drivers */
/* first read the slave drivers */
for (node=engine->slave_drivers; node; node=jack_slist_next(node))
{
jack_driver_t *sdriver = node->data;
sdriver->read (sdriver, nframes);

//XXX: need to remove driver which fail to start
}

/* now the master driver is started */
/* now the master driver is read */
return engine->driver->read(engine->driver, nframes);
}

@@ -2182,11 +2194,9 @@ jack_drivers_write (jack_engine_t *engine, jack_nframes_t nframes)
{
jack_driver_t *sdriver = node->data;
sdriver->write (sdriver, nframes);

//XXX: need to remove driver which fail to start
}

/* now the master driver is started */
/* now the master driver is written */
return engine->driver->write(engine->driver, nframes);
}
static int


Loading…
Cancel
Save