Improved debug messages for all MistIn processes, added ability to manually kill MistIn processes.

This commit is contained in:
Thulinma 2015-07-21 22:23:47 +02:00
parent 7647430cf3
commit dcde050143
2 changed files with 20 additions and 11 deletions

View file

@ -154,10 +154,10 @@ namespace Mist {
} }
} }
DEBUG_MSG(DLVL_DONTEVEN,"Pre-While"); DEBUG_MSG(DLVL_DEVEL,"Input for stream %s started", streamName.c_str());
long long int activityCounter = Util::bootSecs(); long long int activityCounter = Util::bootSecs();
while ((Util::bootSecs() - activityCounter) < 10){//10 second timeout while ((Util::bootSecs() - activityCounter) < 10 && config->is_active){//10 second timeout
Util::wait(1000); Util::wait(1000);
removeUnused(); removeUnused();
userPage.parseEach(callbackWrapper); userPage.parseEach(callbackWrapper);
@ -169,7 +169,7 @@ namespace Mist {
} }
} }
finish(); finish();
DEBUG_MSG(DLVL_DEVEL,"Closing clean"); DEBUG_MSG(DLVL_DEVEL,"Input for stream %s closing clean", streamName.c_str());
//end player functionality //end player functionality
} }
return 0; return 0;

View file

@ -9,22 +9,24 @@
#include INPUTTYPE #include INPUTTYPE
#include <mist/config.h> #include <mist/config.h>
#include <mist/defines.h> #include <mist/defines.h>
#include <mist/procs.h>
int main(int argc, char * argv[]) { int main(int argc, char * argv[]) {
Util::Config conf(argv[0], PACKAGE_VERSION); Util::Config conf(argv[0], PACKAGE_VERSION);
mistIn conv(&conf); mistIn conv(&conf);
if (conf.parseArgs(argc, argv)) { if (conf.parseArgs(argc, argv)) {
std::string streamName = conf.getString("streamname");
IPC::semaphore playerLock; IPC::semaphore playerLock;
if(conf.getString("streamname").size()){ if (streamName.size()){
playerLock.open(std::string("/lock_" + conf.getString("streamname")).c_str(), O_CREAT | O_RDWR, ACCESSPERMS, 1); playerLock.open(std::string("/lock_" + streamName).c_str(), O_CREAT | O_RDWR, ACCESSPERMS, 1);
if (!playerLock.tryWait()){ if (!playerLock.tryWait()){
DEBUG_MSG(DLVL_DEVEL, "A player for stream %s is already running", conf.getString("streamname").c_str()); DEBUG_MSG(DLVL_DEVEL, "A player for stream %s is already running", streamName.c_str());
return 1; return 1;
} }
} }
conf.activate(); conf.activate();
while (conf.is_active){ while (conf.is_active){
int pid = fork(); pid_t pid = fork();
if (pid == 0){ if (pid == 0){
playerLock.close(); playerLock.close();
return conv.run(); return conv.run();
@ -36,15 +38,23 @@ int main(int argc, char * argv[]) {
} }
//wait for the process to exit //wait for the process to exit
int status; int status;
while (waitpid(pid, &status, 0) != pid && errno == EINTR) continue; while (waitpid(pid, &status, 0) != pid && errno == EINTR){
if (!conf.is_active){
DEBUG_MSG(DLVL_DEVEL, "Shutting down input for stream %s because of signal interrupt...", streamName.c_str());
Util::Procs::Stop(pid);
}
continue;
}
//if the exit was clean, don't restart it //if the exit was clean, don't restart it
if (WIFEXITED(status) && (WEXITSTATUS(status) == 0)){ if (WIFEXITED(status) && (WEXITSTATUS(status) == 0)){
DEBUG_MSG(DLVL_MEDIUM, "Finished player succesfully"); DEBUG_MSG(DLVL_MEDIUM, "Input for stream %s shut down cleanly", streamName.c_str());
break; break;
} }
if (DEBUG >= DLVL_DEVEL){ if (DEBUG >= DLVL_DEVEL){
DEBUG_MSG(DLVL_DEVEL, "Player exited with errors - stopping because this is a development build."); DEBUG_MSG(DLVL_DEVEL, "Input for stream %s uncleanly shut down! Aborting restart; this is a development build.", streamName.c_str());
break; break;
}else{
DEBUG_MSG(DLVL_DEVEL, "Input for stream %s uncleanly shut down! Restarting...", streamName.c_str());
} }
} }
playerLock.post(); playerLock.post();
@ -53,4 +63,3 @@ int main(int argc, char * argv[]) {
return 0; return 0;
} }