]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/manager/ortemanager.c
updated email address - petr@smoliku.cz
[orte.git] / orte / manager / ortemanager.c
index 92501251736b8da47052103ba4e21d81459fde6f..16dde7403c8e29e48266d89d0700dc0026b6945b 100644 (file)
@@ -12,7 +12,7 @@
  *                      http://dce.felk.cvut.cz                       
  *                      http://www.ocera.org                          
  *                                                                    
- *  Author:             Petr Smolik    petr.smolik@wo.cz             
+ *  Author:             Petr Smolik    petr@smoliku.cz             
  *  Advisor:            Pavel Pisa                                   
  *  Project Responsible: Zdenek Hanzalek                              
  *  --------------------------------------------------------------------
  
 #include "orte_all.h"
 
+#ifdef HAVE_INTTYPES_H
+ #include <inttypes.h>
+ #if defined(PRIx32) && !defined(ORTE_PRI_HostId)
+  #define ORTE_PRI_HostId PRIx32
+  #define ORTE_PRI_AppId PRIx32
+ #endif
+#endif /*HAVE_INTTYPES_H*/
+
+#ifndef ORTE_PRI_HostId
+  #define ORTE_PRI_HostId x
+  #define ORTE_PRI_AppId x
+#endif
+
+#ifdef MAIN_RENAMED
+#define main ortemanager_main
+#define exit return
+#endif
+
 #ifndef CONFIG_ORTE_RT
 //global variables
-ORTEDomain          *d;
-ORTEDomainProp      dp;
-int32_t             opt,domain=ORTE_DEFAULT_DOMAIN;
-Boolean             orteDaemon=ORTE_FALSE;
-Boolean             orteWinService=ORTE_FALSE;
-ORTEDomainAppEvents *events=NULL;
+static ORTEDomain          *d;
+static ORTEDomainProp      dp;
+static int32_t             opt,domain=ORTE_DEFAULT_DOMAIN;
+static Boolean             orteDaemon=ORTE_FALSE;
+static Boolean             orteWinService=ORTE_FALSE;
+static ORTEDomainAppEvents *events=NULL;
 
 //event system
 Boolean
 onMgrAppRemoteNew(const struct ORTEAppInfo *appInfo, void *param) {
-  printf("%s 0x%x-0x%x was accepted\n",
+  printf("%s 0x%"ORTE_PRI_HostId"-0x%"ORTE_PRI_AppId" was accepted\n",
          (appInfo->appId & 0x3)==MANAGER ? "manager" : "application",
          appInfo->hostId,appInfo->appId);
   return ORTE_TRUE;
@@ -51,7 +69,7 @@ onMgrAppRemoteNew(const struct ORTEAppInfo *appInfo, void *param) {
 
 void
 onMgrAppDelete(const struct ORTEAppInfo *appInfo, void *param) {
-  printf("%s 0x%x-0x%x was deleted\n",
+  printf("%s 0x%"ORTE_PRI_HostId"-0x%"ORTE_PRI_AppId" was deleted\n",
          (appInfo->appId & 0x3)==MANAGER ? "manager" : "application",
          appInfo->hostId,appInfo->appId);
 }
@@ -77,30 +95,23 @@ int managerStop(void) {
 #endif
 
 #ifdef CONFIG_ORTE_UNIX
+#ifdef HAVE_SYS_STAT_H
+  #include <sys/stat.h>                /* For umask() */
+#endif
 //Unix daemon support
-pthread_mutex_t     mutex; //for wake up
-pthread_cond_t     cond; //for wake up
-int                cvalue;
-void sig_usr(int signo) {
-  if ((signo==SIGTERM) || (signo==SIGINT)) {
-    pthread_mutex_lock(&mutex);
-    cvalue=1;
-    pthread_cond_signal(&cond);
-    pthread_mutex_unlock(&mutex);
-  }
-}
 void waitForEndingCommand(void) {
-  pthread_mutex_init(&mutex, NULL);
-  pthread_cond_init(&cond, NULL);
-  cvalue=0;
-  signal(SIGTERM,sig_usr);
-  signal(SIGINT,sig_usr);
-  pthread_mutex_lock(&mutex);
-  while(cvalue==0)
-    pthread_cond_wait(&cond,&mutex);
-  pthread_mutex_unlock(&mutex);
-  pthread_mutex_destroy(&mutex);
-  pthread_cond_destroy(&cond);
+       sigset_t sigset;
+       sigemptyset(&sigset);
+       sigaddset(&sigset, SIGINT);
+       sigaddset(&sigset, SIGTERM);
+       {
+       #ifdef HAVE_SIGWAITINFO
+               sigwaitinfo(&sigset, NULL);
+       #else /*HAVE_SIGWAITINFO*/
+               int sig;
+               sigwait(&sigset, &sig);
+       #endif /*HAVE_SIGWAITINFO*/
+       }
 }
 static int daemonInit(void) {
   pid_t pid;
@@ -133,6 +144,7 @@ static void usage(void) {
   printf("  -P, --purge <s>               purge time in second(s)\n");
   printf("  -I, --metaMulticast <IPAdd>   use multicast IPAddr for metatraffic comm.\n");
   printf("  -t, --timetolive <number>     time-to-live for multicast packets\n");
+  printf("  -L, --listen <IPAdd>          IP address to listen on\n");
 #ifdef CONFIG_ORTE_UNIX
   printf("  -D, --daemon                  start program like daemon\n");
 #endif
@@ -158,6 +170,7 @@ int main(int argc,char *argv[]) {
     { "purge",1,0, 'P' },
     { "metaMulticast",1,0, 'I' },
     { "timetolive",1,0, 't' },
+    { "listen",1,0, 'L' },
 #ifdef CONFIG_ORTE_UNIX
     { "daemon",1,0, 'D' },
 #endif
@@ -176,9 +189,9 @@ int main(int argc,char *argv[]) {
   ORTEDomainPropDefaultGet(&dp);
 
 #if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE
-  while ((opt = getopt_long(argc, argv, "k:p:d:v:R:E:P:I:t:l:VhDesir",&long_opts[0], NULL)) != EOF) {
+  while ((opt = getopt_long(argc, argv, "k:p:d:v:R:E:P:I:t:L:l:VhDesir",&long_opts[0], NULL)) != EOF) {
 #else
-  while ((opt = getopt(argc, argv, "k:p:d:v:R:E:P:I:t:l:VhDesir")) != EOF) {
+  while ((opt = getopt(argc, argv, "k:p:d:v:R:E:P:I:t:L:l:VhDesir")) != EOF) {
 #endif
     switch (opt) {
       case 'p':
@@ -203,6 +216,9 @@ int main(int argc,char *argv[]) {
         dp.multicast.enabled=ORTE_TRUE;
         dp.multicast.ipAddress=StringToIPAddress(optarg);
         break;
+      case 'L':
+        dp.listen=StringToIPAddress(optarg);
+        break;
       case 't':
         dp.multicast.ttl=strtol(optarg,NULL,0);
         break;
@@ -253,8 +269,10 @@ int main(int argc,char *argv[]) {
   }
   
   d=ORTEDomainMgrCreate(domain,&dp,events,ORTE_TRUE);
-  if (!d)
+  if (!d) {
+    perror("ORTEDomainMgrCreate");
     exit(1);
+  }
 
   #ifdef CONFIG_ORTE_UNIX
   if (orteDaemon)