X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=command.c;h=b63eef040994e8b26e78c2ca868eccb5984e580f;hb=0228212677da799b95a2b342bbff6675040aadcb;hp=b6c2de2788a131f446f48893717a826ea3fd8845;hpb=35f1fc325ea80370bb00e7cfcafe457ab6aca27c;p=paraslash.git diff --git a/command.c b/command.c index b6c2de27..b63eef04 100644 --- a/command.c +++ b/command.c @@ -26,6 +26,7 @@ #include "net.h" #include "daemon.h" #include "fd.h" +#include "ipc.h" #include "user_list.h" #include "server_command_list.h" #include "afs_command_list.h" @@ -37,6 +38,7 @@ static RC4_KEY rc4_recv_key; static RC4_KEY rc4_send_key; static unsigned char rc4_buf[2 * RC4_KEY_LEN]; +extern int mmd_mutex; extern struct misc_meta_data *mmd; extern struct sender senders[]; @@ -53,9 +55,9 @@ static void dummy(int s) static void mmd_dup(struct misc_meta_data *new_mmd) { - mmd_lock(); + mutex_lock(mmd_mutex); *new_mmd = *mmd; - mmd_unlock(); + mutex_unlock(mmd_mutex); } /* @@ -175,12 +177,8 @@ static int check_sender_args(int argc, char * const * argv, struct sender_comman if (!subcmds[i]) return -E_COMMAND_SYNTAX; scd->cmd_num = i; - mmd_lock(); - if (!senders[scd->sender_num].client_cmds[scd->cmd_num]) { - mmd_unlock(); + if (!senders[scd->sender_num].client_cmds[scd->cmd_num]) return -E_SENDER_CMD; - } - mmd_unlock(); switch (scd->cmd_num) { case SENDER_ON: case SENDER_OFF: @@ -247,14 +245,14 @@ int com_sender(int fd, int argc, char * const * argv) return ret; } for (i = 0; i < 10; i++) { - mmd_lock(); + mutex_lock(mmd_mutex); if (mmd->sender_cmd_data.cmd_num >= 0) { - mmd_unlock(); + mutex_unlock(mmd_mutex); usleep(100 * 1000); continue; } mmd->sender_cmd_data = scd; - mmd_unlock(); + mutex_unlock(mmd_mutex); break; } return (i < 10)? 1 : -E_LOCK; @@ -269,7 +267,7 @@ int com_si(int fd, int argc, __a_unused char * const * argv) if (argc != 1) return -E_COMMAND_SYNTAX; - mmd_lock(); + mutex_lock(mmd_mutex); for (i = 0; senders[i].name; i++) { char *info = senders[i].info(); sender_info = para_strcat(sender_info, info); @@ -295,7 +293,7 @@ int com_si(int fd, int argc, __a_unused char * const * argv) sender_list, sender_info ); - mmd_unlock(); + mutex_unlock(mmd_mutex); free(ut); free(sender_list); free(sender_info); @@ -444,10 +442,10 @@ int com_play(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; - mmd_lock(); + mutex_lock(mmd_mutex); mmd->new_vss_status_flags |= VSS_PLAYING; mmd->new_vss_status_flags &= ~VSS_NOMORE; - mmd_unlock(); + mutex_unlock(mmd_mutex); return 1; } @@ -457,11 +455,11 @@ int com_stop(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; - mmd_lock(); + mutex_lock(mmd_mutex); mmd->new_vss_status_flags &= ~VSS_PLAYING; mmd->new_vss_status_flags &= ~VSS_REPOS; mmd->new_vss_status_flags |= VSS_NEXT; - mmd_unlock(); + mutex_unlock(mmd_mutex); return 1; } @@ -470,13 +468,13 @@ int com_pause(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; - mmd_lock(); + mutex_lock(mmd_mutex); if (!vss_paused() && !vss_stopped()) { mmd->events++; mmd->new_vss_status_flags &= ~VSS_PLAYING; mmd->new_vss_status_flags &= ~VSS_NEXT; } - mmd_unlock(); + mutex_unlock(mmd_mutex); return 1; } @@ -485,10 +483,10 @@ int com_next(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; - mmd_lock(); + mutex_lock(mmd_mutex); mmd->events++; mmd->new_vss_status_flags |= VSS_NEXT; - mmd_unlock(); + mutex_unlock(mmd_mutex); return 1; } @@ -497,10 +495,10 @@ int com_nomore(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; - mmd_lock(); + mutex_lock(mmd_mutex); if (vss_playing() || vss_paused()) mmd->new_vss_status_flags |= VSS_NOMORE; - mmd_unlock(); + mutex_unlock(mmd_mutex); return 1; } @@ -518,7 +516,7 @@ int com_ff(__a_unused int fd, int argc, char * const * argv) return -E_COMMAND_SYNTAX; if (ret > 1 && c == '-') backwards = 1; /* jmp backwards */ - mmd_lock(); + mutex_lock(mmd_mutex); ret = -E_NO_AUDIO_FILE; if (!mmd->afd.afhi.chunks_total || !mmd->afd.afhi.seconds_total) goto out; @@ -539,7 +537,7 @@ int com_ff(__a_unused int fd, int argc, char * const * argv) mmd->events++; ret = 1; out: - mmd_unlock(); + mutex_unlock(mmd_mutex); return ret; } @@ -553,7 +551,7 @@ int com_jmp(__a_unused int fd, int argc, char * const * argv) return -E_COMMAND_SYNTAX; if (sscanf(argv[1], "%lu", &i) <= 0) return -E_COMMAND_SYNTAX; - mmd_lock(); + mutex_lock(mmd_mutex); ret = -E_NO_AUDIO_FILE; if (!mmd->afd.afhi.chunks_total) goto out; @@ -568,7 +566,7 @@ int com_jmp(__a_unused int fd, int argc, char * const * argv) ret = 1; mmd->events++; out: - mmd_unlock(); + mutex_unlock(mmd_mutex); return ret; } @@ -791,9 +789,9 @@ __noreturn void handle_connect(int fd, const char *peername) /* valid command and sufficient perms */ alarm(0); argc = split_args(command, &argv, "\n"); - mmd_lock(); + mutex_lock(mmd_mutex); mmd->num_commands++; - mmd_unlock(); + mutex_unlock(mmd_mutex); PARA_NOTICE_LOG("calling com_%s() for %s@%s\n", cmd->name, u->name, peername); ret = cmd->handler(fd, argc, argv); @@ -806,10 +804,10 @@ net_err: out: free(command); free(argv); - mmd_lock(); + mutex_lock(mmd_mutex); if (cmd && (cmd->perms & AFS_WRITE) && ret >= 0) mmd->events++; mmd->active_connections--; - mmd_unlock(); + mutex_unlock(mmd_mutex); exit(ret < 0? EXIT_FAILURE : EXIT_SUCCESS); }