]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - server.c
fix the plm database tool
[paraslash.git] / server.c
index 044792f13c40807477cd984501deab4d0d0611e2..a6fca8b6cd5629777ad347e9a20050611aa41895 100644 (file)
--- a/server.c
+++ b/server.c
@@ -67,11 +67,20 @@ struct dbtool dblist[] = {
                .init = random_dbtool_init,
                .update_audio_file = NULL,
        },
+       {
+               .name = "plm",
+               .init = plm_dbtool_init,
+               .update_audio_file = NULL,
+               .pre_select = NULL,
+               .post_select = NULL,
+       },
 #ifdef HAVE_MYSQL
        {
                .name = "mysql",
                .init = mysql_dbtool_init,
                .update_audio_file = NULL,
+               .pre_select = NULL,
+               .post_select = NULL,
        },
 #endif
        {
@@ -288,9 +297,9 @@ static void setup_signal_handling(void)
        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);
        }
@@ -494,6 +503,10 @@ repeat:
                        &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);
@@ -502,6 +515,8 @@ repeat:
        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) {