/** the list of supported database tools */
struct dbtool dblist[] = {
{
- .name = "dopey",
- .init = dopey_dbtool_init,
+ .name = "random",
+ .init = random_dbtool_init,
+ .update_audio_file = NULL,
+ },
+ {
+ .name = "plm",
+ .init = plm_dbtool_init,
.update_audio_file = NULL,
.pre_select = NULL,
.post_select = NULL,
ret += para_install_sighandler(SIGTERM);
ret += para_install_sighandler(SIGHUP);
ret += para_install_sighandler(SIGCHLD);
+ ret += para_install_sighandler(SIGUSR1);
signal(SIGPIPE, SIG_IGN);
- signal(SIGUSR1, SIG_IGN);
- if (ret != 4) {
+ if (ret != 5) {
PARA_EMERG_LOG("%s", "could not install signal handlers\n");
exit(EXIT_FAILURE);
}
mmd->dbt_change = -1; /* no change nec., set to new dbt num by com_cdt */
if (!dblist[1].name)
- goto dopey;
+ goto random;
if (conf.dbtool_given) {
for (i = 0; dblist[i].name; i++) {
if (strcmp(dblist[i].name, conf.dbtool_arg))
if (dblist[i].init(&dblist[i]) < 0) {
PARA_WARNING_LOG("init %s failed",
dblist[i].name);
- goto dopey;
+ goto random;
}
mmd->dbt_num = i;
return;
}
- PARA_WARNING_LOG("%s", "no such dbtool, switching to dopey\n");
- goto dopey;
+ PARA_WARNING_LOG("%s", "no such dbtool, switching to random\n");
+ goto random;
}
/* use the first dbtool that works
- * (assuming that dopey always works)
+ * (assuming that random always works)
*/
for (i = 1; dblist[i].name; i++) {
int ret = dblist[i].init(&dblist[i]);
PARA_CRIT_LOG("%s init failed: %s\n", dblist[i].name,
PARA_STRERROR(-ret));
}
-dopey:
+random:
mmd->dbt_num = 0;
dblist[0].init(&dblist[0]); /* always successful */
}
return;
}
/* init failed */
- PARA_ERROR_LOG("%s -- switching to dopey\n", PARA_STRERROR(-ret));
+ PARA_ERROR_LOG("%s -- switching to the random dbtool\n", PARA_STRERROR(-ret));
dblist[0].init(&dblist[0]);
mmd->dbt_num = 0;
}
&max_fileno,
&rfds, &wfds);
}
+ if (dblist[mmd->dbt_num].pre_select) {
+ ret = dblist[mmd->dbt_num].pre_select(&rfds, &wfds);
+ max_fileno = MAX(max_fileno, ret);
+ }
mmd_unlock();
// PARA_DEBUG_LOG("%s: select (max = %i)\n", __func__, max_fileno);
ret = select(max_fileno + 1, &rfds, &wfds, NULL, timeout);
mmd_lock();
if (mmd->dbt_change >= 0)
handle_dbt_change();
+ if (dblist[mmd->dbt_num].post_select)
+ dblist[mmd->dbt_num].post_select(&rfds, &wfds);
if (ret < 0 && err == EINTR)
goto repeat;
if (ret < 0) {