Ejemplo n.º 1
0
/*
 * 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;
}
Ejemplo n.º 2
0
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);
}