certi-cvs
[Top][All Lists]
Advanced

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

certi myconf RTIA/Communications.cc RTIA/RTIA_f...


From: certi-cvs
Subject: certi myconf RTIA/Communications.cc RTIA/RTIA_f...
Date: Mon, 18 Feb 2008 13:37:30 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Pierre Siron <siron>    08/02/18 13:37:30

Modified files:
        .              : myconf 
        RTIA           : Communications.cc RTIA_federate.cc 
                         RTIA_network.cc TimeManagement.cc 
                         TimeManagement.hh 
        libRTI         : RTIambPrivateRefs.cc RTIambassador.cc 

Log message:
        bug #22292: reentrance management issue

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/myconf?cvsroot=certi&r1=3.10&r2=3.11
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/Communications.cc?cvsroot=certi&r1=3.20&r2=3.21
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA_federate.cc?cvsroot=certi&r1=3.61&r2=3.62
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA_network.cc?cvsroot=certi&r1=3.20&r2=3.21
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/TimeManagement.cc?cvsroot=certi&r1=3.24&r2=3.25
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/TimeManagement.hh?cvsroot=certi&r1=3.11&r2=3.12
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTIambPrivateRefs.cc?cvsroot=certi&r1=3.10&r2=3.11
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTIambassador.cc?cvsroot=certi&r1=3.67&r2=3.68

Patches:
Index: myconf
===================================================================
RCS file: /sources/certi/certi/myconf,v
retrieving revision 3.10
retrieving revision 3.11
diff -u -b -r3.10 -r3.11
--- myconf      14 Jun 2007 13:00:20 -0000      3.10
+++ myconf      18 Feb 2008 13:37:29 -0000      3.11
@@ -1,6 +1,6 @@
 #! /bin/sh
 # CERTI myconf
-# $Id: myconf,v 3.10 2007/06/14 13:00:20 siron Exp $
+# $Id: myconf,v 3.11 2008/02/18 13:37:29 siron Exp $
 
 case $1 in
     sun)
@@ -58,9 +58,9 @@
 esac
 
 WHERE=`dirname $0`
-$WHERE/configure --prefix=$HOME/CERTI-3.2.4 $SHARED $2 $3 $4 $5
+$WHERE/configure --prefix=$HOME/CERTI-3.2.5 $SHARED $2 $3 $4 $5
 make clean
 make
 make install
 
-# $Id: myconf,v 3.10 2007/06/14 13:00:20 siron Exp $
+# $Id: myconf,v 3.11 2008/02/18 13:37:29 siron Exp $

Index: RTIA/Communications.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/Communications.cc,v
retrieving revision 3.20
retrieving revision 3.21
diff -u -b -r3.20 -r3.21
--- RTIA/Communications.cc      9 Dec 2007 16:46:50 -0000       3.20
+++ RTIA/Communications.cc      18 Feb 2008 13:37:29 -0000      3.21
@@ -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.20 2007/12/09 16:46:50 erk Exp $
+// $Id: Communications.cc,v 3.21 2008/02/18 13:37:29 siron Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -157,9 +157,6 @@
     assert(req != NULL);
     D.Out(pdRequest, "Sending Request to Federate, Type %d.", req->type);
     sendUN(req);
-    receiveUN(rep);
-    D.Out(pdAnswer, "Received Answer from Federate.");
-    assert(req->type == rep->type);
     // G.Out(pdGendoc,"exit  Communications::requestFederateService");
 }
 
@@ -342,4 +339,4 @@
 
 }} // namespace certi/rtia
 
-// $Id: Communications.cc,v 3.20 2007/12/09 16:46:50 erk Exp $
+// $Id: Communications.cc,v 3.21 2008/02/18 13:37:29 siron Exp $

Index: RTIA/RTIA_federate.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA_federate.cc,v
retrieving revision 3.61
retrieving revision 3.62
diff -u -b -r3.61 -r3.62
--- RTIA/RTIA_federate.cc       12 Feb 2008 14:26:42 -0000      3.61
+++ RTIA/RTIA_federate.cc       18 Feb 2008 13:37:30 -0000      3.62
@@ -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.61 2008/02/12 14:26:42 rousse Exp $
+// $Id: RTIA_federate.cc,v 3.62 2008/02/18 13:37:30 siron Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -199,7 +199,7 @@
         break ;
 
       case Message::REGISTER_FEDERATION_SYNCHRONIZATION_POINT:
-        D.Out(pdTrace, "Receiving Message from Federate, type RequestPause.");
+        D.Out(pdTrace, "Receiving Message from Federate, type 
RegisterFederationSynchronizationPoint.");
 
         // boolean true means with federates set
         if ( req->getBoolean() )
@@ -212,7 +212,7 @@
         break ;
 
       case Message::SYNCHRONIZATION_POINT_ACHIEVED:
-        D.Out(pdTrace, "Receiving Message from Federate, type PauseAchieved.");
+        D.Out(pdTrace, "Receiving Message from Federate, type 
SynchronizationPointAchieved.");
 
         fm->unregisterSynchronization(req->getLabel(), e);
         break ;
@@ -904,6 +904,7 @@
         break ;
 
       case Message::TICK_REQUEST:
+        tm->_tick_request_ack = true ;
         if (req->getBoolean()) {
            tm->_ongoing_tick = true ;
            D.Out(pdDebug, "Receiving Message from Federate, type 
TickRequest2.");
@@ -1271,16 +1272,26 @@
         rep.setException(e_RTIinternalError);
     }
 
-    delete req ;
+    delete req ;;
 
-    if (!tm->_ongoing_tick) {
+     
+    if (rep.type == Message::TICK_REQUEST)
+       if ((!tm->_ongoing_tick) && tm->_tick_request_ack) {
+           // acknowledgment of an empty tick
+           comm->sendUN(&rep);
+           D.Out(pdDebug, "Reply send to Unix socket.");
+        }
+        else {
+           // no answer in the case of a successful tick
+        }
+    else {
+       // generic federate service acknowledgment
         comm->sendUN(&rep);
         D.Out(pdDebug, "Reply send to Unix socket.");
     }
-    // else, this answer is differed until a no empty tick
 
 }
 
 }} // namespace certi/rtia
 
-// $Id: RTIA_federate.cc,v 3.61 2008/02/12 14:26:42 rousse Exp $
+// $Id: RTIA_federate.cc,v 3.62 2008/02/18 13:37:30 siron Exp $

Index: RTIA/RTIA_network.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA_network.cc,v
retrieving revision 3.20
retrieving revision 3.21
diff -u -b -r3.20 -r3.21
--- RTIA/RTIA_network.cc        12 Feb 2008 14:26:42 -0000      3.20
+++ RTIA/RTIA_network.cc        18 Feb 2008 13:37:30 -0000      3.21
@@ -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_network.cc,v 3.20 2008/02/12 14:26:42 rousse Exp $
+// $Id: RTIA_network.cc,v 3.21 2008/02/18 13:37:30 siron Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -79,18 +79,18 @@
         D.Out(pdTrace, "Receiving Message from RTIG, type 
NetworkMessage::SYNCHRONIZATION_"
               "POINT_REGISTRATION_SUCCEEDED.");
 
-        queues->insertBeginCommand(msg);
+        queues->insertLastCommand(msg);
         break ;
       case NetworkMessage::ANNOUNCE_SYNCHRONIZATION_POINT:
         D.Out(pdTrace, "Receiving Message from RTIG, type 
NetworkMessage::ANNOUCE_"
               "SYNCHRONIZATION_POINT.");
 
-        queues->insertBeginCommand(msg);
+        queues->insertLastCommand(msg);
         break ;
       case NetworkMessage::FEDERATION_SYNCHRONIZED:
         D.Out(pdTrace,
               "Receiving Message from RTIG, type 
NetworkMessage::FEDERATION_SYNCHRONIZED.");
-        queues->insertBeginCommand(msg);
+        queues->insertLastCommand(msg);
         break ;
 
       case NetworkMessage::DISCOVER_OBJECT:
@@ -282,18 +282,6 @@
         queues->insertBeginCommand(msg);
         break ;
 
-      case NetworkMessage::FEDERATE_SAVE_BEGUN:
-        D.Out(pdTrace, "Receiving Message from RTIG, "
-              " type FederateSaveBegun.");
-        queues->insertBeginCommand(msg);
-        break ;
-
-      case NetworkMessage::FEDERATE_SAVE_COMPLETE:
-        D.Out(pdTrace, "Receiving Message from RTIG, "
-              " type FederateSaveComplete.");
-        queues->insertBeginCommand(msg);
-        break ;
-
       case NetworkMessage::FEDERATION_SAVED:
       case NetworkMessage::FEDERATION_NOT_SAVED:
         D.Out(pdTrace, "Receiving Message from RTIG, "
@@ -350,4 +338,4 @@
 
 }} // namespace certi/rtia
 
-// $Id: RTIA_network.cc,v 3.20 2008/02/12 14:26:42 rousse Exp $
+// $Id: RTIA_network.cc,v 3.21 2008/02/18 13:37:30 siron Exp $

Index: RTIA/TimeManagement.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/TimeManagement.cc,v
retrieving revision 3.24
retrieving revision 3.25
diff -u -b -r3.24 -r3.25
--- RTIA/TimeManagement.cc      5 Dec 2007 12:29:39 -0000       3.24
+++ RTIA/TimeManagement.cc      18 Feb 2008 13:37:30 -0000      3.25
@@ -18,11 +18,12 @@
 // 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.24 2007/12/05 12:29:39 approx Exp $
+// $Id: TimeManagement.cc,v 3.25 2008/02/18 13:37:30 siron Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
 #include "TimeManagement.hh"
+#include <float.h>
 
 namespace certi {
 namespace rtia {
@@ -122,6 +123,7 @@
   msg.trace("TimeManagement::executeFederateService ");
 
   _ongoing_tick = false ;  // end of the blocking tick, a message is delivered
+  _tick_request_ack = false ;  // the callback message serves as the ack
 
     switch (msg.type) {
 
@@ -659,14 +661,21 @@
 
     if (_est_contraint) {
         // give a TSO message.
-        D.Out(pdDebug, "Logical time : %f, LBTS : %f.", date_avancee, _LBTS);
+        if (_LBTS == DBL_MAX)
+           D.Out(pdDebug, "Logical time : %f, LBTS : infini.", date_avancee);
+        else
+           D.Out(pdDebug, "Logical time : %f, LBTS : %lf.", date_avancee, 
_LBTS);
         min = (_LBTS<date_avancee)?(_LBTS):(date_avancee);
         msg = queues->giveTsoMessage(min, msg_donne, msg_restant);
 
         // otherwise
         if (!msg_donne) {
             // if LBTS allows to give a timeAdvanceGrant.
-            D.Out(pdDebug, "Logical time : %f, LBTS : %f, lookahead : %f.",
+            if (_LBTS == DBL_MAX)
+               D.Out(pdDebug, "Logical time : %f, LBTS : infini, lookahead : 
%f.",
+                     date_avancee, _lookahead_courant);
+            else
+               D.Out(pdDebug, "Logical time : %f, LBTS : %lf, lookahead : %f.",
                   date_avancee, _LBTS, _lookahead_courant);
             if (date_avancee < _LBTS) {
                 // send a timeAdvanceGrant to federate.
@@ -710,6 +719,7 @@
           req.getFederationTime());
 
     _ongoing_tick = false ;  // end of the blocking tick, a message is 
delivered
+    _tick_request_ack = false ;
 
     comm->requestFederateService(&req, &rep);
 
@@ -756,4 +766,4 @@
 
 }} // namespaces
 
-// $Id: TimeManagement.cc,v 3.24 2007/12/05 12:29:39 approx Exp $
+// $Id: TimeManagement.cc,v 3.25 2008/02/18 13:37:30 siron Exp $

Index: RTIA/TimeManagement.hh
===================================================================
RCS file: /sources/certi/certi/RTIA/TimeManagement.hh,v
retrieving revision 3.11
retrieving revision 3.12
diff -u -b -r3.11 -r3.12
--- RTIA/TimeManagement.hh      25 Oct 2007 08:07:16 -0000      3.11
+++ RTIA/TimeManagement.hh      18 Feb 2008 13:37:30 -0000      3.12
@@ -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.11 2007/10/25 08:07:16 rousse Exp $
+// $Id: TimeManagement.hh,v 3.12 2008/02/18 13:37:30 siron Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef CERTI_RTIA_TIME_MANAGEMENT_HH
@@ -94,6 +94,7 @@
 
     // Attribute
     bool _ongoing_tick;  // tick2 processing
+    bool _tick_request_ack;  // do we have to acknowledge the tick request
     bool _asynchronous_delivery ;
 
 private:
@@ -131,4 +132,4 @@
 
 #endif // CERTI_RTIA_TIME_MANAGEMENT_HH
 
-// $Id: TimeManagement.hh,v 3.11 2007/10/25 08:07:16 rousse Exp $
+// $Id: TimeManagement.hh,v 3.12 2008/02/18 13:37:30 siron Exp $

Index: libRTI/RTIambPrivateRefs.cc
===================================================================
RCS file: /sources/certi/certi/libRTI/RTIambPrivateRefs.cc,v
retrieving revision 3.10
retrieving revision 3.11
diff -u -b -r3.10 -r3.11
--- libRTI/RTIambPrivateRefs.cc 11 Feb 2008 14:33:27 -0000      3.10
+++ libRTI/RTIambPrivateRefs.cc 18 Feb 2008 13:37:30 -0000      3.11
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RTIambPrivateRefs.cc,v 3.10 2008/02/11 14:33:27 erk Exp $
+// $Id: RTIambPrivateRefs.cc,v 3.11 2008/02/18 13:37:30 siron Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -60,23 +60,14 @@
 RTIambPrivateRefs::executeService(Message *req, Message *rep)
 {
     G.Out(pdGendoc,"enter RTIambPrivateRefs::executeService");
-    // raise exception if reentrant call.
-       // FIXME EN: On SMP machine may we really 
-       //           guarantee that the following protection
-       //           against re-entrance is an efficient one?
-    if (is_reentrant) {
-        throw ConcurrentAccessAttempted("is_reentrant was true in 
RTIambPrivateRefs::executeService");
-    }
 
     D.Out(pdDebug, "sending request to RTIA.");
     
-    is_reentrant = true ;
     try {
         req->write(socketUn);
     }
     catch (NetworkError) {
         std::cerr << "libRTI: exception: NetworkError (write)" << std::endl ;
-        is_reentrant = false;
         throw RTIinternalError("libRTI: Network Write Error");
     }
 
@@ -88,20 +79,19 @@
     }
     catch (NetworkError) {
         std::cerr << "libRTI: exception: NetworkError (read)" << std::endl ;
-        is_reentrant = false;
         throw RTIinternalError("libRTI: Network Read Error waiting RTI reply");
     }
 
     D.Out(pdDebug, "RTIA reply received.");
 
+    if (req->type != Message::TICK_REQUEST) {
     if (rep->type != req->type) {
         std::cout << "LibRTI: Assertion failed: rep->type != req->type" << 
std::endl ;
-        is_reentrant = false;
         throw RTIinternalError("RTIambPrivateRefs::executeService: "
                                "rep->type != req->type");
     }
+    }
 
-    is_reentrant = false ;
     D.Out(pdDebug, "processing returned exception (from reply).");
     processException(rep);
     D.Out(pdDebug, "exception processed.");
@@ -550,4 +540,4 @@
     }
 }
 
-// $Id: RTIambPrivateRefs.cc,v 3.10 2008/02/11 14:33:27 erk Exp $
+// $Id: RTIambPrivateRefs.cc,v 3.11 2008/02/18 13:37:30 siron Exp $

Index: libRTI/RTIambassador.cc
===================================================================
RCS file: /sources/certi/certi/libRTI/RTIambassador.cc,v
retrieving revision 3.67
retrieving revision 3.68
diff -u -b -r3.67 -r3.68
--- libRTI/RTIambassador.cc     12 Feb 2008 14:26:43 -0000      3.67
+++ libRTI/RTIambassador.cc     18 Feb 2008 13:37:30 -0000      3.68
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RTIambassador.cc,v 3.67 2008/02/12 14:26:43 rousse Exp $
+// $Id: RTIambassador.cc,v 3.68 2008/02/18 13:37:30 siron Exp $
 // ----------------------------------------------------------------------------
 
 
@@ -228,12 +228,6 @@
 {
     Message vers_RTI, vers_Fed ;
 
-    // Throw exception if reentrant call.
-    if (privateRefs->is_reentrant)
-        throw ConcurrentAccessAttempted("is_reentrant was true in 
RTI::RTIambassador::tick_kernel");
-
-    privateRefs->is_reentrant = true ;
-
     // Prevenir le RTI
     vers_RTI.type = Message::TICK_REQUEST ;
     if (locked)
@@ -251,8 +245,6 @@
         throw RTIinternalError("RTI::RTIambassador::tick_kernel (tick1) : 
NetworkError-->RTIinternalError");
     }
 
-    for (;;) {
-
         // Lire la reponse du RTIA local
         try {
             vers_Fed.read(privateRefs->socketUn);
@@ -261,13 +253,11 @@
             cout << "tick 2." << endl ;
             cout << "LibRTI:: Catched NetworkError, throw RTIinternalError."
                  << endl ;
-            privateRefs->is_reentrant = false;
             throw RTIinternalError("RTI::RTIambassador::tick_kernel (tick2) : 
NetworkError-->RTIinternalError");
         }
 
         // Si c'est de type TICK_REQUEST, il n'y a qu'a traiter l'exception.
         if (vers_Fed.type == Message::TICK_REQUEST) {
-            privateRefs->is_reentrant = false ;
             privateRefs->processException(&vers_Fed);
             return RTI::Boolean(vers_Fed.getBoolean());
         }
@@ -277,6 +267,7 @@
 
         vers_RTI.setException(e_NO_EXCEPTION);
 
+
         try {
                                //D.Mes( pdMessage, 'M', vers_Fed.type);
                                vers_Fed.trace("RTI::RTIambassador::tick ");
@@ -499,44 +490,27 @@
             }
         }
         catch (InvalidFederationTime &e) {
-               privateRefs->is_reentrant = false;
             vers_RTI.setException(e_InvalidFederationTime, e._reason);
             throw ;
         }
         catch (TimeAdvanceWasNotInProgress &e) {
-               privateRefs->is_reentrant = false;
             vers_RTI.setException(e_TimeAdvanceWasNotInProgress, e._reason);
             throw ;
         }
         catch (FederationTimeAlreadyPassed &e) {
-               privateRefs->is_reentrant = false;
             vers_RTI.setException(e_FederationTimeAlreadyPassed, e._reason);
         }
         catch (FederateInternalError &e) {
-               privateRefs->is_reentrant = false;
             vers_RTI.setException(e_FederateInternalError, e._reason);
             throw ;
         }
         catch (Exception &e) {
-               privateRefs->is_reentrant = false;
             vers_RTI.setException(e_RTIinternalError, e._reason);
             throw ;
         }
 
-        // retourner au RTI la reponse du service demande
-        vers_RTI.type = vers_Fed.type ;
+    return RTI::Boolean(true);
 
-        try {
-            vers_RTI.write(privateRefs->socketUn);
-        }
-        catch (NetworkError) {
-            cout << "tick 3." << endl ;
-            cout << "LibRTI:: Catched NetworkError, throw RTIinternalError."
-                 << endl ;
-            privateRefs->is_reentrant = false;
-            throw RTIinternalError("RTI::RTIambassador::tick_kernel (tick 3) : 
NetworkError-->RTIinternalError");
-        }
-    }
 }
 
 // ----------------------------------------------------------------------------
@@ -2908,4 +2882,4 @@
     privateRefs->executeService(&req, &rep);
 }
 
-// $Id: RTIambassador.cc,v 3.67 2008/02/12 14:26:43 rousse Exp $
+// $Id: RTIambassador.cc,v 3.68 2008/02/18 13:37:30 siron Exp $




reply via email to

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