REQUIREMENTS update.
[paraslash.git] / server.c
index 244c1ecd25da7959cf3ce6b9dcff3d9e814b2ad0..915687649f7f84c8a572b2257a7439498d31c873 100644 (file)
--- a/server.c
+++ b/server.c
@@ -12,8 +12,9 @@
  *
  * Starting points for getting an overview:
  *
+ *
  *     - The main programs: \ref server.c, \ref audiod.c, \ref client.c,
- *       \ref audioc.c, \ref fsck.c,
+ *       \ref audioc.c, \ref fsck.c, \ref afh.c
  *     - Server: \ref server_command, \ref sender,
  *     - Audio file selector: \ref audio_format_handler, \ref mood, \ref afs_table,
  *     - Client: \ref receiver, \ref receiver_node, \ref filter, \ref filter_node.
@@ -21,7 +22,7 @@
  *
  * The gory details, listed by topic:
  *
- *     - Audio format handlers: \ref mp3_afh.c, \ref ogg_afh.c, \ref aac_afh.c,
+ *     - Audio format handlers: \ref send_common.c \ref mp3_afh.c, \ref ogg_afh.c, \ref aac_afh.c,
  *     - Decoders: \ref mp3dec.c, \ref oggdec.c, \ref aacdec.c,
  *     - Volume normalizer: \ref compress.c,
  *     - Output: \ref alsa_write.c, \ref osx_write.c,
@@ -107,15 +108,17 @@ struct server_args_info conf;
 /** A random value used in child context for authentication. */
 uint32_t afs_socket_cookie;
 
+/** The mutex protecting the shared memory area containing the mmd struct. */
+int mmd_mutex;
+
 /* global variables for server-internal use */
 static FILE *logfile;
 /** The file containing user information (public key, permissions). */
 static char *user_list_file = NULL;
-static int mmd_mutex, mmd_shm_id;
-static pid_t afs_pid;
+static int mmd_shm_id;
 
 
-/** The task resposible for server command handling. */
+/** The task responsible for server command handling. */
 struct server_command_task {
        /** TCP port on which para_server listens for connections. */
        int listen_fd;
@@ -194,27 +197,6 @@ err_out:
        exit(EXIT_FAILURE);
 }
 
-/**
- * Lock the shared memory area containing the mmd struct.
- *
- * \sa semop(2), struct misc_meta_data.
- */
-void mmd_lock(void)
-{
-       mutex_lock(mmd_mutex);
-}
-
-/**
- * Unlock the shared memory area containing the mmd struct.
- *
- * \sa semop(2), struct misc_meta_data.
- */
-
-void mmd_unlock(void)
-{
-       mutex_unlock(mmd_mutex);
-}
-
 static void parse_config(int override)
 {
        char *home = para_homedir();
@@ -278,8 +260,8 @@ static void handle_sighup(void)
        logfile = NULL;
        parse_config(1); /* reopens log */
        init_user_list(user_list_file); /* reload user list */
-       if (afs_pid)
-               kill(afs_pid, SIGHUP);
+       if (mmd->afs_pid)
+               kill(mmd->afs_pid, SIGHUP);
 }
 
 static void signal_post_select(struct sched *s, struct task *t)
@@ -300,7 +282,7 @@ static void signal_post_select(struct sched *s, struct task *t)
                        int ret = para_reap_child(&pid);
                        if (ret <= 0)
                                break;
-                       if (pid != afs_pid)
+                       if (pid != mmd->afs_pid)
                                continue;
                        PARA_EMERG_LOG("fatal: afs died\n");
                        goto genocide;
@@ -466,10 +448,10 @@ static int init_afs(void)
        if (ret < 0)
                exit(EXIT_FAILURE);
        afs_socket_cookie = para_random((uint32_t)-1);
-       afs_pid = fork();
-       if (afs_pid < 0)
+       mmd->afs_pid = fork();
+       if (mmd->afs_pid < 0)
                exit(EXIT_FAILURE);
-       if (!afs_pid) { /* child (afs) */
+       if (!mmd->afs_pid) { /* child (afs) */
                close(afs_server_socket[0]);
                afs_init(afs_socket_cookie, afs_server_socket[1]);
        }
@@ -511,10 +493,9 @@ static void server_init(int argc, char **argv)
                daemon_init();
        PARA_NOTICE_LOG("initializing audio format handlers\n");
        afh_init();
-       mmd->server_pid = getpid();
-       init_signal_task();
        PARA_NOTICE_LOG("initializing the audio file selector\n");
        afs_socket = init_afs();
+       init_signal_task();
        PARA_NOTICE_LOG("initializing virtual streaming system\n");
        init_vss_task(afs_socket);
        init_server_command_task(argc, argv);
@@ -552,9 +533,9 @@ static int server_select(int max_fileno, fd_set *readfds, fd_set *writefds,
        int ret;
 
        status_refresh();
-       mmd_unlock();
+       mutex_unlock(mmd_mutex);
        ret = para_select(max_fileno + 1, readfds, writefds, timeout_tv);
-       mmd_lock();
+       mutex_lock(mmd_mutex);
        return ret;
 }
 
@@ -577,7 +558,7 @@ int main(int argc, char *argv[])
                .select_function = server_select
        };
        server_init(argc, argv);
-       mmd_lock();
+       mutex_lock(mmd_mutex);
        ret = schedule(&s);
        if (ret < 0) {
                PARA_EMERG_LOG("%s\n", para_strerror(-ret));