*
*
* - 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.
* - 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.
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);
char *peer_name;
pid_t child_pid;
uint32_t *chunk_table;
- char *info_string;
if (!FD_ISSET(sct->listen_fd, &s->rfds))
return;
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) {
return;
}
/* mmd might already have changed at this point */
- free(info_string);
free(chunk_table);
alarm(ALARM_TIMEOUT);
close_listed_fds();