]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/liborte/ORTEDomainApp.c
version 0.2.2 (mac, solaris patch)
[orte.git] / orte / liborte / ORTEDomainApp.c
index 6498699beac63e2e1e56736f19d844f065cf5307..e244362a9ec15e6c63aacadeee7569967cbc4619 100644 (file)
@@ -33,8 +33,9 @@ ORTEDomainAppCreate(int domain, ORTEDomainProp *prop,
   CSTReaderParams   cstReaderParams;
   char              iflocal[MAX_INTERFACES*MAX_STRING_IPADDRESS_LENGTH];
   char              sIPAddress[MAX_STRING_IPADDRESS_LENGTH];
+  char              sbuff[128];
   int               i;
-  u_int16_t         port=0;
+  uint16_t          port=0;
 
   debug(21,10) ("ORTEDomainAppCreate: start\n");
   //Create domainApplication
@@ -48,14 +49,14 @@ ORTEDomainAppCreate(int domain, ORTEDomainProp *prop,
   d->taskRecvMetatraffic.sock.port=0;
   d->taskRecvUserdata.sock.port=0;
   d->taskSend.sock.port=0;
-  PublParamsInit(&d->publPropDefault);
-  SubsParamsInit(&d->subsPropDefault);
   //init structure objectEntry
   ObjectEntryHID_init_root_field(&d->objectEntry);
   pthread_rwlock_init(&d->objectEntry.objRootLock,NULL);
   htimerRoot_init_queue(&d->objectEntry);
   pthread_rwlock_init(&d->objectEntry.htimRootLock,NULL);
-  pthread_mutex_init(&d->objectEntry.htimSendMutex, NULL);
+  pthread_cond_init(&d->objectEntry.htimSendCond,NULL);
+  pthread_mutex_init(&d->objectEntry.htimSendMutex,NULL);
+  d->objectEntry.htimSendCondValue=0;
   //publication,subscriptions
   d->publications.counter=d->subscriptions.counter=0;
   CSTWriter_init_root_field(&d->publications);
@@ -87,7 +88,7 @@ ORTEDomainAppCreate(int domain, ORTEDomainProp *prop,
       strcat(iflocal,IPAddressToString(d->domainProp.IFProp[i].ipAddress,sIPAddress));
     debug(21,2) ("ORTEDomainAppCreate: localIPAddres(es) %s\n",iflocal);
   } else{
-    debug(21,2) ("ORTEDomainAppCreate: no activ interface card\n");
+    debug(21,2) ("ORTEDomainAppCreate: no active interface card\n");
   }
 
   //DomainEvents
@@ -99,11 +100,11 @@ ORTEDomainAppCreate(int domain, ORTEDomainProp *prop,
 
   //local buffers
   d->mbRecvMetatraffic.cdrStream.buffer=
-      (u_int8_t*)MALLOC(d->domainProp.recvBuffSize);
+      (uint8_t*)MALLOC(d->domainProp.recvBuffSize);
   d->mbRecvUserdata.cdrStream.buffer=
-      (u_int8_t*)MALLOC(d->domainProp.recvBuffSize);
+      (uint8_t*)MALLOC(d->domainProp.recvBuffSize);
   d->mbSend.cdrStream.buffer=
-      (u_int8_t*)MALLOC(d->domainProp.sendBuffSize);
+      (uint8_t*)MALLOC(d->domainProp.sendBuffSize);
   if ((!d->mbRecvMetatraffic.cdrStream.buffer) || 
       (!d->mbRecvUserdata.cdrStream.buffer) || 
       (!d->mbSend.cdrStream.buffer)) {    //no memory
@@ -217,14 +218,22 @@ ORTEDomainAppCreate(int domain, ORTEDomainProp *prop,
     }
   }
   //ApplicatonKeyList
-  appParams->managerKeyList[0]=StringToIPAddress("127.0.0.1");
-  for(i=0;i<d->domainProp.IFCount;i++)
-    appParams->managerKeyList[i+1]=d->domainProp.IFProp[i].ipAddress;
-  appParams->managerKeyCount=d->domainProp.IFCount+1;
+  if (!d->domainProp.keys) {
+    appParams->managerKeyList[0]=StringToIPAddress("127.0.0.1");
+    for(i=0;i<d->domainProp.IFCount;i++)
+      appParams->managerKeyList[i+1]=d->domainProp.IFProp[i].ipAddress;
+    appParams->managerKeyCount=d->domainProp.IFCount+1;
+  } else {
+    appParams->managerKeyCount=i=0;
+    while (getStringPart(d->domainProp.keys,':',&i,sbuff)) {
+      appParams->managerKeyList[appParams->managerKeyCount++]=
+          StringToIPAddress(sbuff);
+    }
+  }
   d->appParams=appParams;
   //insert object, doesn't need to be locked
   d->objectEntryOID=objectEntryAdd(d,&d->guid,(void*)appParams);
-  d->objectEntryOID->private=ORTE_TRUE;
+  d->objectEntryOID->privateCreated=ORTE_TRUE;
 
   //CST objects
   //  writerApplicationSelf (WAS)
@@ -310,7 +319,7 @@ ORTEDomainAppCreate(int domain, ORTEDomainProp *prop,
       OID_READ_SUBS,&cstReaderParams,NULL);
   
   //add csChange for WAS
-  appSelfParamChanged(d,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE);
+  appSelfParamChanged(d,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE);
   
   //Start threads
   if (!suspended) {
@@ -328,6 +337,11 @@ ORTEDomainAppDestroy(ORTEDomain *d) {
 
   debug(21,10) ("ORTEDomainAppDestroy: start\n");
   if (!d) return ORTE_FALSE;
+  pthread_rwlock_wrlock(&d->objectEntry.objRootLock);
+  pthread_rwlock_wrlock(&d->objectEntry.htimRootLock);
+  appSelfParamChanged(d,ORTE_TRUE,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE);    
+  pthread_rwlock_unlock(&d->objectEntry.htimRootLock);
+  pthread_rwlock_unlock(&d->objectEntry.objRootLock);
   //Stoping threads
   if (!d->taskRecvMetatraffic.terminate) {
     d->taskRecvMetatraffic.terminate=ORTE_TRUE;
@@ -353,8 +367,9 @@ ORTEDomainAppDestroy(ORTEDomain *d) {
   sock_cleanup(&d->taskRecvUserdata.sock);
   sock_cleanup(&d->taskSend.sock);
 
-  //Mutex(es)
-  pthread_mutex_destroy(&d->objectEntry.htimSendMutex); 
+  //Signals
+  pthread_cond_destroy(&d->objectEntry.htimSendCond);
+  pthread_mutex_destroy(&d->objectEntry.htimSendMutex);
 
   //rwLocks
   pthread_rwlock_destroy(&d->objectEntry.objRootLock);
@@ -369,7 +384,7 @@ ORTEDomainAppDestroy(ORTEDomain *d) {
   pthread_rwlock_destroy(&d->typeEntry.lock);
   
   //Pattern
-  ORTEDomainAppSubscriptionPatternDestroyAll(d);
+  ORTEDomainAppSubscriptionPatternDestroy(d);
   pthread_rwlock_unlock(&d->typeEntry.lock);    
   pthread_rwlock_destroy(&d->patternEntry.lock);
   
@@ -443,7 +458,7 @@ ORTEDomainAppSubscriptionPatternRemove(ORTEDomain *d,const char *topic,
 
 /*****************************************************************************/
 Boolean 
-ORTEDomainAppSubscriptionPatternDestroyAll(ORTEDomain *d) {
+ORTEDomainAppSubscriptionPatternDestroy(ORTEDomain *d) {
   PatternNode *pnode;
   
   if (!d) return ORTE_FALSE;