[NET]: Bug-fix for getaddrinfo()
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index e2e252152cf7c300c9842ae153a5fcbaa1b45271..58b04a8bafce749308aefe17d42ebaf178d4d45b 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -75,6 +75,7 @@ struct command_task {
        struct task task;
 };
 
+extern int mmd_mutex;
 extern struct misc_meta_data *mmd;
 
 static int server_socket;
@@ -571,15 +572,15 @@ static int activate_mood_or_playlist(char *arg, int *num_admissible)
                free(current_mop);
                if (arg) {
                        current_mop = para_strdup(arg);
-                       mmd_lock();
+                       mutex_lock(mmd_mutex);
                        strncpy(mmd->afs_mode_string, arg,
                                sizeof(mmd->afs_mode_string));
                        mmd->afs_mode_string[sizeof(mmd->afs_mode_string) - 1] = '\0';
-                       mmd_unlock();
+                       mutex_unlock(mmd_mutex);
                } else {
-                       mmd_lock();
+                       mutex_lock(mmd_mutex);
                        strcpy(mmd->afs_mode_string, "dummy");
-                       mmd_unlock();
+                       mutex_unlock(mmd_mutex);
                        current_mop = NULL;
                }
        }
@@ -757,8 +758,8 @@ static void signal_post_select(struct sched *s, struct task *t)
 {
        struct signal_task *st = container_of(t, struct signal_task, task);
        if (getppid() == 1) {
-               t->error = -E_AFS_PARENT_DIED;
-               return;
+               PARA_EMERG_LOG("para_server died\n");
+               goto shutdown;
        }
        if (!FD_ISSET(st->fd, &s->rfds))
                return;
@@ -771,6 +772,8 @@ static void signal_post_select(struct sched *s, struct task *t)
                init_admissible_files(current_mop);
                return;
        }
+       PARA_EMERG_LOG("terminating on signal %d\n", st->signum);
+shutdown:
        sched_shutdown();
        t->error = -E_AFS_SIGNAL;
 }
@@ -1020,7 +1023,7 @@ static void register_command_task(uint32_t cookie)
  */
 __noreturn void afs_init(uint32_t cookie, int socket_fd)
 {
-       struct sched s;
+       static struct sched s;
        int i, ret;
 
        register_signal_task();