Revamp status item handling.
[paraslash.git] / server.c
index 9bf6c3f88004fb3c4a00a2d892b58a53e7a3df89..e08b0661d14ddc4a8ef1cf2386cb75efe0655d19 100644 (file)
--- a/server.c
+++ b/server.c
@@ -14,7 +14,7 @@
  *
  *
  *     - The main programs: \ref server.c, \ref audiod.c, \ref client.c,
- *       \ref audioc.c, \ref fsck.c, \ref afh.c
+ *       \ref audioc.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.
@@ -47,7 +47,6 @@
  *     - Time: \ref time.c,
  *     - Spawning processes: \ref exec.c,
  *     - Inter process communication: \ref ipc.c,
- *     - The object storage layer: \ref osl.c,
  *     - Blob tables: \ref blob.c,
  *     - The error subssystem: \ref error.h.
  *     - Access control for paraslash senders: \ref acl.c, \ref acl.h.
  * Low-level data structures:
  *
  *     - Doubly linked lists: \ref list.h,
- *     - Red-black trees: \ref rbtree.h, \ref rbtree.c,
  *     - Ring buffer: \ref ringbuffer.c, \ref ringbuffer.h,
  *     - Hashing: \ref hash.h, \ref sha1.h, \ref sha1.c,
  *     - Crypto: \ref crypt.c.
- *
+ *     - Forward error correction: \ref fec.c
  */
 
 #include <signal.h>
 #include <dirent.h>
 #include <sys/time.h>
+#include <osl.h>
 
 #include "para.h"
 #include "error.h"
@@ -318,7 +317,6 @@ static void signal_post_select(struct sched *s, struct task *t)
                waitpid(mmd->afs_pid, NULL, 0);
 cleanup:
                free(mmd->afd.afhi.chunk_table);
-               free(mmd->afd.afhi.info_string);
                close_listed_fds();
                mutex_destroy(mmd_mutex);
                shm_detach(mmd);
@@ -360,7 +358,6 @@ static void command_post_select(struct sched *s, struct task *t)
        char *peer_name;
        pid_t child_pid;
        uint32_t *chunk_table;
-       char *info_string;
 
        if (!FD_ISSET(sct->listen_fd, &s->rfds))
                return;
@@ -373,15 +370,15 @@ static void command_post_select(struct sched *s, struct task *t)
        mmd->num_connects++;
        mmd->active_connections++;
        random();
-       /* The chunk table and the info_string are pointers located in the
-        * mmd struct that point to dynamically allocated memory that must be
-        * freed by the parent and the child. However, as the mmd struct is in
-        * a shared memory area, there's no guarantee that after the fork these
-        * pointers are still valid in child context. As these two pointers are
-        * not used in the child anyway, we save them to local variables and
-        * free the memory via that copy in the child.
+       /*
+        * The chunk table is a pointer located in the mmd struct that point to
+        * dynamically allocated memory that must be freed by the parent and
+        * the child. However, as the mmd struct is in a shared memory area,
+        * there's no guarantee that after the fork these pointers are still
+        * valid in child context. As this pointer is not used in the child
+        * anyway, we save it to a local variable and free the memory via that
+        * copy in the child.
         */
-       info_string = mmd->afd.afhi.info_string;
        chunk_table = mmd->afd.afhi.chunk_table;
        child_pid = fork();
        if (child_pid < 0) {
@@ -394,7 +391,6 @@ static void command_post_select(struct sched *s, struct task *t)
                return;
        }
        /* mmd might already have changed at this point */
-       free(info_string);
        free(chunk_table);
        alarm(ALARM_TIMEOUT);
        close_listed_fds();