[Top][All Lists]
[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 $
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- certi myconf RTIA/Communications.cc RTIA/RTIA_f...,
certi-cvs <=