/* * Entry point */ int main(int argc, char** argv) { bool testInstall = false; char* installPath = "/srv/PufferPanel"; char* installUser; char* distro = getDistro(); if (isEqual(distro, "ubuntu")) { installUser = "******"; } else if (isEqual(distro, "debian")) { installUser = "******"; } else if (isEqual(distro, "unknown")) { installUser = "******"; } else { installUser = "******"; } bool doLangOnly = false; bool doConfigOnly = false; /* * Process command line arguments */ int i = 1; while (i < argc) { if (isEqual(argv[i], "-u")) { if (i + 1 < argc - 1) { printUsage(argv[0]); return (EXIT_FAILURE); } else { i++; installUser = argv[i]; } } else if (isEqual(argv[i], "-t")) { testInstall = true; } else if (isEqual(argv[i], "-v")) { printf("PufferPanel Installer - Version C-%s (%s)\n", INSTALLERVERSION, PPVERSION); return (EXIT_SUCCESS); } else if (isEqual(argv[i], "-h")) { printUsage(argv[0]); return (EXIT_SUCCESS); } else { printUsage(argv[0]); return (EXIT_FAILURE); } i++; } startLogging(); int returnCode = innerMain(testInstall, installPath, installUser); closeLogging(); return returnCode; }
static void stopBroker(void *p) { struct timespec waitTime; int rc,sa=0,sp=0, count = 0; /* SF 3497096 bugzilla 77022 */ /* stopping is set to prevent other threads calling this routine */ pthread_mutex_lock(&syncMtx); if (stopping) { printf("Stopping sfcb is in progress. Please wait...\n"); pthread_mutex_unlock(&syncMtx); return; } else { stopping=1; pthread_mutex_unlock(&syncMtx); } /* Look for providers ready status. A 5 seconds wait is performed to * avoid a hang here in the event of provider looping, crashing etc */ for (;;) { pthread_mutex_lock(&syncMtx); if (prov_rdy_state == -1) { if (count >= 5) break; /* lock will be released later */ pthread_mutex_unlock(&syncMtx); sleep(1); count++; } else break; /* lock will be released later */ } stopLocalConnectServer(); for(;;) { if (adaptersStopped==0) { pthread_mutex_lock(&sdMtx); waitTime.tv_sec=time(NULL)+1; //5 waitTime.tv_nsec=0; if (sa==0) fprintf(stderr,"--- Stopping adapters\n"); sa++; if (stopNextAdapter()) { rc=pthread_cond_timedwait(&sdCnd,&sdMtx,&waitTime); } else { /* no adapters found */ adaptersStopped=1; } pthread_mutex_unlock(&sdMtx); } if (adaptersStopped) { pthread_mutex_lock(&sdMtx); waitTime.tv_sec=time(NULL)+1; //5 waitTime.tv_nsec=0; if (sp==0) fprintf(stderr,"--- Stopping providers\n"); sp++; if (stopNextProc()) { rc=pthread_cond_timedwait(&sdCnd,&sdMtx,&waitTime); } //else providersStopped=1; pthread_mutex_unlock(&sdMtx); } if (providersStopped) break; } remSem(); uninit_sfcBroker(); uninitProvProcCtl(); uninitSocketPairs(); sunsetControl(); uninitGarbageCollector(); closeLogging(); free((void *)sfcBrokerStart); pthread_mutex_unlock(&syncMtx); if (restartBroker) { char *emsg=strerror(errno); execvp("sfcbd",restartArgv); fprintf(stderr,"--- execv for restart problem: %s\n",emsg); abort(); } else exit(0); }