certi-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[certi-cvs] certi libCERTI/Message_W.cc libCERTI/Message.hh...


From: certi-cvs
Subject: [certi-cvs] certi libCERTI/Message_W.cc libCERTI/Message.hh...
Date: Mon, 05 May 2008 09:47:21 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      08/05/05 09:47:21

Modified files:
        libCERTI       : Message_W.cc Message.hh Message_R.cc 
        libRTI         : RTIambassador.cc 
        RTIA           : RTIA.cc RTIA_federate.cc TimeManagement.cc 
                         Communications.cc TimeManagement.hh 
                         Statistics.cc 

Log message:
        Fix bug #23113 : Assert violation when invoking a federation service 
from a federate service
        Patch from Petr Gotthard

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Message_W.cc?cvsroot=certi&r1=3.23&r2=3.24
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Message.hh?cvsroot=certi&r1=3.42&r2=3.43
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Message_R.cc?cvsroot=certi&r1=3.20&r2=3.21
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTIambassador.cc?cvsroot=certi&r1=3.77&r2=3.78
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA.cc?cvsroot=certi&r1=3.19&r2=3.20
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA_federate.cc?cvsroot=certi&r1=3.74&r2=3.75
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/TimeManagement.cc?cvsroot=certi&r1=3.34&r2=3.35
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/Communications.cc?cvsroot=certi&r1=3.25&r2=3.26
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/TimeManagement.hh?cvsroot=certi&r1=3.15&r2=3.16
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/Statistics.cc?cvsroot=certi&r1=3.14&r2=3.15

Patches:
Index: libCERTI/Message_W.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/Message_W.cc,v
retrieving revision 3.23
retrieving revision 3.24
diff -u -b -r3.23 -r3.24
--- libCERTI/Message_W.cc       23 Apr 2008 07:36:02 -0000      3.23
+++ libCERTI/Message_W.cc       5 May 2008 09:47:19 -0000       3.24
@@ -17,7 +17,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: Message_W.cc,v 3.23 2008/04/23 07:36:02 siron Exp $
+// $Id: Message_W.cc,v 3.24 2008/05/05 09:47:19 erk Exp $
 // ----------------------------------------------------------------------------
 
 
@@ -665,6 +665,7 @@
       case FEDERATION_RESTORE_BEGUN:
       case ENABLE_ASYNCHRONOUS_DELIVERY:
       case DISABLE_ASYNCHRONOUS_DELIVERY:
+      case TICK_REQUEST_NEXT:
         header.bodySize = 0 ;
         break ;
 
@@ -745,4 +746,4 @@
 
 } // namespace certi
 
-// $Id: Message_W.cc,v 3.23 2008/04/23 07:36:02 siron Exp $
+// $Id: Message_W.cc,v 3.24 2008/05/05 09:47:19 erk Exp $

Index: libCERTI/Message.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/Message.hh,v
retrieving revision 3.42
retrieving revision 3.43
diff -u -b -r3.42 -r3.43
--- libCERTI/Message.hh 23 Apr 2008 07:36:01 -0000      3.42
+++ libCERTI/Message.hh 5 May 2008 09:47:19 -0000       3.43
@@ -232,6 +232,7 @@
         ENABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH,
         DISABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH,
         TICK_REQUEST,
+        TICK_REQUEST_NEXT,
 
        LAST // should be the "last" (not used)
     };

Index: libCERTI/Message_R.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/Message_R.cc,v
retrieving revision 3.20
retrieving revision 3.21
diff -u -b -r3.20 -r3.21
--- libCERTI/Message_R.cc       23 Apr 2008 07:36:01 -0000      3.20
+++ libCERTI/Message_R.cc       5 May 2008 09:47:19 -0000       3.21
@@ -17,7 +17,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: Message_R.cc,v 3.20 2008/04/23 07:36:01 siron Exp $
+// $Id: Message_R.cc,v 3.21 2008/05/05 09:47:19 erk Exp $
 // ----------------------------------------------------------------------------
 
 
@@ -636,6 +636,7 @@
       case FEDERATION_RESTORE_BEGUN:
       case ENABLE_ASYNCHRONOUS_DELIVERY:
       case DISABLE_ASYNCHRONOUS_DELIVERY:
+      case TICK_REQUEST_NEXT:
         break ;
 
       // ------- federationTime useful
@@ -764,4 +765,4 @@
 
 } // namespace certi
 
-// $Id: Message_R.cc,v 3.20 2008/04/23 07:36:01 siron Exp $
+// $Id: Message_R.cc,v 3.21 2008/05/05 09:47:19 erk Exp $

Index: libRTI/RTIambassador.cc
===================================================================
RCS file: /sources/certi/certi/libRTI/RTIambassador.cc,v
retrieving revision 3.77
retrieving revision 3.78
diff -u -b -r3.77 -r3.78
--- libRTI/RTIambassador.cc     29 Apr 2008 13:21:37 -0000      3.77
+++ libRTI/RTIambassador.cc     5 May 2008 09:47:20 -0000       3.78
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RTIambassador.cc,v 3.77 2008/04/29 13:21:37 rousse Exp $
+// $Id: RTIambassador.cc,v 3.78 2008/05/05 09:47:20 erk Exp $
 // ----------------------------------------------------------------------------
 
 
@@ -241,7 +241,7 @@
 {
     Message vers_RTI, vers_Fed ;
 
-    // Prevenir le RTI
+    // Request callback(s) from the local RTIA
     vers_RTI.type = Message::TICK_REQUEST ;
     vers_RTI.setBoolean(multiple);
     vers_RTI.setMinTickTime(minimum);
@@ -501,6 +501,20 @@
                   privateRefs->leave("RTI service requested by RTI is 
unknown.");
               }
             }
+
+            // Request next callback from the RTIA
+            Message tick_next;
+            tick_next.type = Message::TICK_REQUEST_NEXT;
+
+            try {
+                tick_next.write(privateRefs->socketUn);
+            }
+            catch (NetworkError) {
+                cout << "tick 3." << endl ;
+                cout << "LibRTI:: Catched NetworkError, throw 
RTIinternalError."
+                     << endl ;
+                throw RTIinternalError("RTI::RTIambassador::__tick_kernel 
(tick3) : NetworkError-->RTIinternalError");
+            }
         }
         catch (InvalidFederationTime &e) {
             vers_RTI.setException(e_InvalidFederationTime, e._reason);
@@ -2935,4 +2949,4 @@
     privateRefs->executeService(&req, &rep);
 }
 
-// $Id: RTIambassador.cc,v 3.77 2008/04/29 13:21:37 rousse Exp $
+// $Id: RTIambassador.cc,v 3.78 2008/05/05 09:47:20 erk Exp $

Index: RTIA/RTIA.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA.cc,v
retrieving revision 3.19
retrieving revision 3.20
diff -u -b -r3.19 -r3.20
--- RTIA/RTIA.cc        26 Apr 2008 14:59:41 -0000      3.19
+++ RTIA/RTIA.cc        5 May 2008 09:47:20 -0000       3.20
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: RTIA.cc,v 3.19 2008/04/26 14:59:41 erk Exp $
+// $Id: RTIA.cc,v 3.20 2008/05/05 09:47:20 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -124,53 +124,42 @@
        msg_un      = NULL;
        msg_tcp_udp = NULL;
         try {          
+            switch (tm->_tick_state) {
+              case TimeManagement::NO_TICK:
+                /* tick() is not active:
+                 *   block until RTIA or federate message comes
+                 */
             comm->readMessage(n, &msg_tcp_udp, &msg_un, NULL);
-            assert((msg_un!=NULL) || (msg_tcp_udp!=NULL));
-        }
-        catch (NetworkSignal) {
-            fm->_fin_execution = true ;
-            n = 0 ;
-            delete msg_un ;
-            delete msg_tcp_udp ;
-        }
-
-        switch (n) {
-          case 0:
-            break ;
-          case 1:
-            processNetworkMessage(msg_tcp_udp);
-            break ;
-          case 2:
-            processFederateRequest(msg_un);
-            break ;
-          case 3: // timeout
-            break ;
-          default:
-            assert(false);
-        }
+                break;
 
-        // special case, blocking tick
-        while (!fm->_fin_execution && tm->_blocking_tick) {
-               // read a message from the rtig
-            // same code is reused, but only the case 1 should match
-               /* NetworkMessage will be allocated by the readMessage call
-                * We may not get a Message in this call see previous comment
+              case TimeManagement::TICK_BLOCKING:
+                /* blocking tick() waits for an event to come:
+                 *   block until RTIA or federate message comes, or timeout 
expires
                 */
-            msg_un      = NULL;
-            msg_tcp_udp = NULL;
-
-            try {
                 if (tm->_tick_timeout != 
std::numeric_limits<double>::infinity() &&
-                   tm->_tick_timeout < LONG_MAX)
-                {
+                    tm->_tick_timeout < LONG_MAX) {
+
                     struct timeval timev;
                     timev.tv_sec = int(tm->_tick_timeout);
                     timev.tv_usec = 
int((tm->_tick_timeout-timev.tv_sec)*1000000.0);
 
                     comm->readMessage(n, &msg_tcp_udp, &msg_un, &timev);
                 }
-                else {
+                else
                     comm->readMessage(n, &msg_tcp_udp, &msg_un, NULL);
+                break;
+
+              case TimeManagement::TICK_CALLBACK:
+              case TimeManagement::TICK_RETURN:
+                /* tick() waits until a federate callback finishes:
+                 *   block until federate message comes
+                 *   RTIA messages are queued in a system queue
+                 */
+                comm->readMessage(n, NULL, &msg_un, NULL);
+                break;
+
+              default:
+                assert(false);
                 }
 
                 /* timev is undefined after select() */
@@ -178,6 +167,7 @@
             catch (NetworkSignal) {
                 fm->_fin_execution = true ;
                 n = 0 ;
+            delete msg_un ;
                 delete msg_tcp_udp ;
             }
 
@@ -185,24 +175,26 @@
               case 0:
                 break ;
               case 1:
-                processNetworkMessage(msg_tcp_udp) ;  // could authorize a 
callback
-                // may have reset tm->_blocking_tick
+            processNetworkMessage(msg_tcp_udp);
+            if (tm->_tick_state == TimeManagement::TICK_BLOCKING)
                 processOngoingTick();
                 break ;
               case 2:
-                assert(false);
+            processFederateRequest(msg_un);
+            break ;
               case 3: // timeout
+            if (tm->_tick_state == TimeManagement::TICK_BLOCKING) {
                 // stop the ongoing tick() operation
-                tm->_blocking_tick = false;
+                tm->_tick_state = TimeManagement::TICK_RETURN;
                 processOngoingTick();
+            }
                 break ;
               default:
                 assert(false);
             }
         }   
-    }   
 }
 
 }} // namespace certi/rtia
 
-// $Id: RTIA.cc,v 3.19 2008/04/26 14:59:41 erk Exp $
+// $Id: RTIA.cc,v 3.20 2008/05/05 09:47:20 erk Exp $

Index: RTIA/RTIA_federate.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA_federate.cc,v
retrieving revision 3.74
retrieving revision 3.75
diff -u -b -r3.74 -r3.75
--- RTIA/RTIA_federate.cc       26 Apr 2008 14:59:42 -0000      3.74
+++ RTIA/RTIA_federate.cc       5 May 2008 09:47:20 -0000       3.75
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: RTIA_federate.cc,v 3.74 2008/04/26 14:59:42 erk Exp $
+// $Id: RTIA_federate.cc,v 3.75 2008/05/05 09:47:20 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -27,6 +27,7 @@
 #include "fed.hh"
 #include "RoutingSpace.hh"
 #include "XmlParser.hh"
+#include <assert.h>
 #ifdef _WIN32
 #include <time.h>
 #include <sys/timeb.h>
@@ -69,6 +70,7 @@
     switch (type) {
       case Message::RESIGN_FEDERATION_EXECUTION:
       case Message::TICK_REQUEST:
+      case Message::TICK_REQUEST_NEXT:
       case Message::GET_OBJECT_CLASS_HANDLE:
       case Message::GET_OBJECT_CLASS_NAME:
       case Message::GET_ATTRIBUTE_HANDLE:
@@ -961,17 +963,28 @@
         break ;
 
       case Message::TICK_REQUEST:
+        if (tm->_tick_state != TimeManagement::NO_TICK)
+            throw RTIinternalError("TICK_REQUEST cannot be called 
recursively");
+
         tm->_tick_multiple = req->getBoolean();
+        tm->_tick_result = false; // default return value
 
        if (req->getMinTickTime() > 0.0)
        {
             tm->_tick_timeout = req->getMinTickTime();
             tm->_tick_stop_time = currentTickTime() + req->getMaxTickTime();
-
-            tm->_blocking_tick = true ;
+            tm->_tick_state = TimeManagement::TICK_BLOCKING;
         }
         else
-            tm->_blocking_tick = false ;
+            tm->_tick_state = TimeManagement::TICK_CALLBACK;
+
+        processOngoingTick();
+        break ;
+
+      case Message::TICK_REQUEST_NEXT:
+        if (tm->_tick_state != TimeManagement::TICK_CALLBACK &&
+            tm->_tick_state != TimeManagement::TICK_RETURN)
+            throw RTIinternalError("unexpected TICK_REQUEST_NEXT");
 
         processOngoingTick();
         break ;
@@ -990,35 +1003,62 @@
 void
 RTIA::processOngoingTick()
 {
+    Message msg_ack;
     TypeException exc = e_NO_EXCEPTION;
-    bool pending;
 
-    do {
-        // send a single callback to federate (if any)
-       pending = tm->tick(exc);
+    while (1) {
+        switch (tm->_tick_state) {
+          case TimeManagement::TICK_BLOCKING:
+            /* blocking tick() waits for an event to come:
+             *   try to evoke a single callback
+             */
+            tm->_tick_result = tm->tick(exc);
+            // if a callback has not been evoked
+            if (tm->_tick_state != TimeManagement::TICK_NEXT)
+                return; // keep waiting
+            // else goto TICK_NEXT
+
+          case TimeManagement::TICK_NEXT:
+            /* a callback was evoked
+             *   decide how to continue
+             */
+            if (tm->_tick_result &&
+                tm->_tick_multiple && currentTickTime() < tm->_tick_stop_time)
+                tm->_tick_state = TimeManagement::TICK_CALLBACK;
+            else
+                tm->_tick_state = TimeManagement::TICK_RETURN;
 
-       // processing a callback may have reset tm->_blocking_tick
+            return;
 
-        if (!tm->_tick_multiple)
-           break;
-
-       if (currentTickTime() > tm->_tick_stop_time)
-       {
-            tm->_blocking_tick = false;
-            break;
-       }
-    }
-    while (pending);
-
-    if (!tm->_blocking_tick)
-    {
-        Message msg_ack;
+          case TimeManagement::TICK_CALLBACK:
+            /* tick() waits until a federate callback finishes
+             *   try to evoke a single callback
+             */
+            tm->_tick_result = tm->tick(exc);
+            // if a callback has been evoked
+            if (tm->_tick_state == TimeManagement::TICK_NEXT)
+                break; // goto TICK_NEXT
+            // else goto TICK_RETURN
+
+          case TimeManagement::TICK_RETURN:
+            /* send TICK_REQUEST response
+             */
         if ( exc != e_RTIinternalError )
            msg_ack.setException(exc);
         // terminate __tick() call in the federate
         msg_ack.type = Message::TICK_REQUEST;
-        msg_ack.setBoolean(pending);
+            msg_ack.setBoolean(tm->_tick_result);
+            msg_ack.setMinTickTime(0); // unused
+            msg_ack.setMaxTickTime(0); // unused
         comm->requestFederateService(&msg_ack);
+
+            tm->_tick_state = TimeManagement::NO_TICK;
+            return;
+
+          default:
+            std::cerr << "Unknown state: " << tm->_tick_state << std::endl;
+            assert(false);
+        }
     }
 }
 
@@ -1369,7 +1409,8 @@
 
     delete req;
 
-    if (rep.type != Message::TICK_REQUEST) {
+    if (rep.type != Message::TICK_REQUEST &&
+        rep.type != Message::TICK_REQUEST_NEXT) {
        // generic federate service acknowledgment
        // the TICK_REQUEST confirmation is generated in processOngoingTick()
        comm->sendUN(&rep);
@@ -1380,4 +1421,4 @@
 
 }} // namespace certi/rtia
 
-// $Id: RTIA_federate.cc,v 3.74 2008/04/26 14:59:42 erk Exp $
+// $Id: RTIA_federate.cc,v 3.75 2008/05/05 09:47:20 erk Exp $

Index: RTIA/TimeManagement.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/TimeManagement.cc,v
retrieving revision 3.34
retrieving revision 3.35
diff -u -b -r3.34 -r3.35
--- RTIA/TimeManagement.cc      30 Apr 2008 17:01:09 -0000      3.34
+++ RTIA/TimeManagement.cc      5 May 2008 09:47:20 -0000       3.35
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: TimeManagement.cc,v 3.34 2008/04/30 17:01:09 erk Exp $
+// $Id: TimeManagement.cc,v 3.35 2008/05/05 09:47:20 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -83,7 +83,7 @@
     lastNullMessageDate = 0.0 ;
 
     _avancee_en_cours = PAS_D_AVANCEE ;
-    _blocking_tick         = false ;
+    _tick_state = NO_TICK;
     _asynchronous_delivery = false ;
 
     _heure_courante = 0.0 ;
@@ -124,7 +124,7 @@
   G.Out(pdGendoc,"enter TimeManagement::executeFederateService for type 
%d",msg.getType());
   D.Out(pdRequest, "Execute federate service: Type %d.", msg.getType());
 
-    _blocking_tick = false;  // indicate a callback was processed
+    _tick_state = TICK_NEXT;  // indicate the callback was processed
 
     switch (msg.getType()) {
 
@@ -830,7 +830,7 @@
     if (_lookahead_courant == epsilon)
        _lookahead_courant = 0.0 ;
 
-    _blocking_tick = false;  // indicate a callback was processed
+    _tick_state = TICK_NEXT;  // indicate the callback was processed
 
     comm->requestFederateService(&req);
 
@@ -921,4 +921,4 @@
 
 }} // namespaces
 
-// $Id: TimeManagement.cc,v 3.34 2008/04/30 17:01:09 erk Exp $
+// $Id: TimeManagement.cc,v 3.35 2008/05/05 09:47:20 erk Exp $

Index: RTIA/Communications.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/Communications.cc,v
retrieving revision 3.25
retrieving revision 3.26
diff -u -b -r3.25 -r3.26
--- RTIA/Communications.cc      26 Apr 2008 14:59:41 -0000      3.25
+++ RTIA/Communications.cc      5 May 2008 09:47:21 -0000       3.26
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: Communications.cc,v 3.25 2008/04/26 14:59:41 erk Exp $
+// $Id: Communications.cc,v 3.26 2008/05/05 09:47:21 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -177,51 +177,53 @@
     const int tcp_fd(SecureTCPSocket::returnSocket());
     const int udp_fd(SocketUDP::returnSocket());
 
+    int max_fd = 0; // not used for _WIN32
     fd_set fdset ;
     FD_ZERO(&fdset);
 
-    FD_SET(_socket_un, &fdset);
+    if (msg_reseau) {
     FD_SET(tcp_fd, &fdset);
     FD_SET(udp_fd, &fdset);
-
-       #ifdef _WIN32   //For Windows, First "Select" argument isn't used
-               int     max_fd= 0;
-       #else
-               int max_fd = std::max(_socket_un, std::max(tcp_fd, udp_fd));
-       #endif
+#ifndef _WIN32
+       max_fd = std::max(max_fd, std::max(tcp_fd, udp_fd));
+#endif
+    }
+    if (msg) {
+        FD_SET(_socket_un, &fdset);
+#ifndef _WIN32
+       max_fd = std::max(max_fd, _socket_un);
+#endif
+    }
 
 #ifdef FEDERATION_USES_MULTICAST
     // if multicast link is initialized (during join federation).
     if (_est_init_mc) {
         FD_SET(_socket_mc, &fdset);
-
-               #ifdef _WIN32   //For Windows, First "Select" argument isn't 
used
-                       max_fd= 0;
-               #else
+#ifndef _WIN32
                        max_fd = std::max(max_fd, _socket_mc);
-               #endif
+#endif
    }
 #endif
 
-    if (!waitingList.empty()) {
+    if (msg_reseau && !waitingList.empty()) {
         // One message is in waiting buffer.        
         *msg_reseau = waitingList.front();
         waitingList.pop_front();                
         n = 1 ;
     }
-    else if (SecureTCPSocket::isDataReady()) {
+    else if (msg_reseau && SecureTCPSocket::isDataReady()) {
         // Datas are in TCP waiting buffer.
         // Read a message from RTIG TCP link.
        *msg_reseau = NM_Factory::receive((SecureTCPSocket *) this);        
         n = 1 ;
     }
-    else if (SocketUDP::isDataReady()) {
+    else if (msg_reseau && SocketUDP::isDataReady()) {
         // Datas are in UDP waiting buffer.
         // Read a message from RTIG UDP link.
        *msg_reseau = NM_Factory::receive((SocketUDP *) this);       
         n = 1 ;
     }
-    else if (SocketUN::isDataReady()) {
+    else if (msg && SocketUN::isDataReady()) {
         // Datas are in UNIX waiting buffer.
         // Read a message from federate UNIX link.
        (*msg) = new Message();
@@ -231,12 +233,13 @@
     else {
         // waitingList is empty and no data in TCP buffer.
         // Wait a message (coming from federate or network).
+#ifdef _WIN32
         if (select(max_fd, &fdset, NULL, NULL, timeout) < 0) {
-                       #ifdef _WIN32
-                                if(WSAGetLastError() == WSAEINTR)
-                       #else
-                                if(errno == EINTR)
-                       #endif 
+            if (WSAGetLastError() == WSAEINTR)
+#else
+        if (select(max_fd+1, &fdset, NULL, NULL, timeout) < 0) {
+            if (errno == EINTR)
+#endif 
                            {
                 throw NetworkSignal("EINTR on select");
                 }
@@ -336,4 +339,4 @@
 
 }} // namespace certi/rtia
 
-// $Id: Communications.cc,v 3.25 2008/04/26 14:59:41 erk Exp $
+// $Id: Communications.cc,v 3.26 2008/05/05 09:47:21 erk Exp $

Index: RTIA/TimeManagement.hh
===================================================================
RCS file: /sources/certi/certi/RTIA/TimeManagement.hh,v
retrieving revision 3.15
retrieving revision 3.16
diff -u -b -r3.15 -r3.16
--- RTIA/TimeManagement.hh      23 Apr 2008 07:36:01 -0000      3.15
+++ RTIA/TimeManagement.hh      5 May 2008 09:47:21 -0000       3.16
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: TimeManagement.hh,v 3.15 2008/04/23 07:36:01 siron Exp $
+// $Id: TimeManagement.hh,v 3.16 2008/05/05 09:47:21 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef CERTI_RTIA_TIME_MANAGEMENT_HH
@@ -105,8 +105,15 @@
     bool requestRegulateurState() { return _est_regulateur ; };
 
     // Attribute
-    bool _blocking_tick;  // processing the tick
+    enum {
+        NO_TICK,
+        TICK_BLOCKING,
+        TICK_NEXT,
+        TICK_CALLBACK,
+        TICK_RETURN
+    } _tick_state;
     bool _tick_multiple;  // process multiple callbacks
+    bool _tick_result;  // tick() return value
     RTI::TickTime _tick_timeout;
     RTI::TickTime _tick_stop_time;
     bool _asynchronous_delivery ;
@@ -148,4 +155,4 @@
 
 #endif // CERTI_RTIA_TIME_MANAGEMENT_HH
 
-// $Id: TimeManagement.hh,v 3.15 2008/04/23 07:36:01 siron Exp $
+// $Id: TimeManagement.hh,v 3.16 2008/05/05 09:47:21 erk Exp $

Index: RTIA/Statistics.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/Statistics.cc,v
retrieving revision 3.14
retrieving revision 3.15
diff -u -b -r3.14 -r3.15
--- RTIA/Statistics.cc  6 Mar 2008 08:56:27 -0000       3.14
+++ RTIA/Statistics.cc  5 May 2008 09:47:21 -0000       3.15
@@ -208,6 +208,7 @@
        FED_MSG_NAME(Message::ENABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH);
        FED_MSG_NAME(Message::DISABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH);
        FED_MSG_NAME(Message::TICK_REQUEST);
+       FED_MSG_NAME(Message::TICK_REQUEST_NEXT);
 
        // RTI messages
        RTI_MSG_NAME(NetworkMessage::CLOSE_CONNEXION);
@@ -361,4 +362,4 @@
 #undef FED_MSG_NAME
 #undef RTI_MSG_NAME
 
-// $Id: Statistics.cc,v 3.14 2008/03/06 08:56:27 rousse Exp $
+// $Id: Statistics.cc,v 3.15 2008/05/05 09:47:21 erk Exp $




reply via email to

[Prev in Thread] Current Thread [Next in Thread]