struct task task;
};
+extern int mmd_mutex;
extern struct misc_meta_data *mmd;
static int server_socket;
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;
}
}
{
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;
init_admissible_files(current_mop);
return;
}
+ PARA_EMERG_LOG("terminating on signal %d\n", st->signum);
+shutdown:
sched_shutdown();
t->error = -E_AFS_SIGNAL;
}
*/
__noreturn void afs_init(uint32_t cookie, int socket_fd)
{
- struct sched s;
+ static struct sched s;
int i, ret;
register_signal_task();