summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-05-20 02:36:46 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-05-20 02:36:46 +0000
commit0c68595ddd5452680d878e40b69160135d2abc97 (patch)
tree4d7c80bab3de76d6f6183a70a1c7966161c00fd5
parent495760cb16e65fa22e312d8bd35e8c14225f756f (diff)
downloadATCD-0c68595ddd5452680d878e40b69160135d2abc97.tar.gz
Added several @@ comments for Fred and Ossama
-rw-r--r--TAO/tao/Acceptor_Registry.cpp36
-rw-r--r--TAO/tao/Acceptor_Registry.h12
-rw-r--r--TAO/tao/Connect.cpp5
-rw-r--r--TAO/tao/IIOP_Acceptor.cpp19
-rw-r--r--TAO/tao/IIOP_Acceptor.h4
-rw-r--r--TAO/tao/IIOP_Connector.cpp3
-rw-r--r--TAO/tao/IIOP_Factory.cpp3
-rw-r--r--TAO/tao/IIOP_Factory.h3
-rw-r--r--TAO/tao/IIOP_Transport.h12
-rw-r--r--TAO/tao/ORB.cpp38
-rw-r--r--TAO/tao/ORB_Core.cpp26
-rw-r--r--TAO/tao/ORB_Core.h6
-rw-r--r--TAO/tao/Pluggable.cpp10
-rw-r--r--TAO/tao/Pluggable.h12
14 files changed, 133 insertions, 56 deletions
diff --git a/TAO/tao/Acceptor_Registry.cpp b/TAO/tao/Acceptor_Registry.cpp
index 18b00e266eb..186870cc812 100644
--- a/TAO/tao/Acceptor_Registry.cpp
+++ b/TAO/tao/Acceptor_Registry.cpp
@@ -21,6 +21,9 @@ TAO_Acceptor_Registry::~TAO_Acceptor_Registry (void)
TAO_Acceptor *
TAO_Acceptor_Registry::get_acceptor (CORBA::ULong tag)
{
+ // @@ Fred&Ossama: Since this is going to be a common operation you
+ // may want to consider using a Hash_Map_Manager, or even a
+ // simple Map_Manager.
TAO_AcceptorSetItor end =
this->acceptors_.end ();
@@ -38,11 +41,20 @@ TAO_Acceptor_Registry::get_acceptor (CORBA::ULong tag)
int
TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core)
{
+ // @@ Fred&Ossama: This is not the problem you have to solve right
+ // now, but we thought about giving explicit names to each
+ // endpoint, the user could then use those names to setup
+ // policies in the ORB that indicate which endpoints are served
+ // by which thread.
+ // IMHO that is one more reason to keep a list of endpoints in
+ // the ORB_Core, instead of a string.
+ // BTW, that also removes the restriction of using ';' in the
+ // addresses. Just my two cents.
// protocol_factories is in the following form
// IOP1://addr1,addr2,...,addrN/;IOP2://addr1,...addrM/;...
- ACE_Auto_Basic_Array_Ptr <char>
+ ACE_Auto_Basic_Array_Ptr <char>
str (orb_core->orb_params ()->endpoints ().rep ());
ACE_Auto_Basic_Array_Ptr <char> addr_str;
@@ -52,7 +64,7 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core)
iop_str != 0;
iop_str = ACE_OS::strtok_r (0, ";", &last_iop))
{
-
+
ACE_CString iop (iop_str);
int indx = iop.find ("://", 0);
if ( indx == iop.npos)
@@ -61,12 +73,12 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core)
"(%P|%t) Invalid endpoint epecification.\n"),
-1);
}
-
+
ACE_CString prefix = iop.substring (0, indx);
ACE_CString addrs = iop.substring (indx+3);
if (addrs [addrs.length () - 1] == '/')
addrs [addrs.length () - 1] = '\0'; // get rid of trailing /
-
+
char *last_addr=0;
addr_str.reset (addrs.rep ());
for (char *astr = ACE_OS::strtok_r (addr_str.get (), ",", &last_addr);
@@ -76,16 +88,16 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core)
&last_addr))
{
ACE_CString address (astr);
-
+
// Now get the list of avaliable protocol factories.
- TAO_ProtocolFactorySetItor end =
+ TAO_ProtocolFactorySetItor end =
orb_core->protocol_factories ()->end ();
- TAO_ProtocolFactorySetItor factory =
+ TAO_ProtocolFactorySetItor factory =
orb_core->protocol_factories ()->begin ();
-
+
TAO_Acceptor *acceptor;
- for (acceptor = 0 ;
- factory != end ;
+ for (acceptor = 0 ;
+ factory != end ;
factory++)
{
if ((*factory)->factory ()->match_prefix (prefix))
@@ -100,7 +112,7 @@ TAO_Acceptor_Registry::open (TAO_ORB_Core *orb_core)
break;
}
- else
+ else
{
ACE_ERROR_RETURN ((LM_ERROR,
"(%P|%t) Unable to create an acceptor for %s\n",
@@ -133,4 +145,4 @@ template class ACE_Unbounded_Set_Iterator<TAO_Acceptor*>;
#pragma instantiate ACE_Unbounded_Set_Iterator<TAO_Acceptor*>;
-#endif
+#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/TAO/tao/Acceptor_Registry.h b/TAO/tao/Acceptor_Registry.h
index d8123f228a7..6cc7f0d1a9e 100644
--- a/TAO/tao/Acceptor_Registry.h
+++ b/TAO/tao/Acceptor_Registry.h
@@ -38,6 +38,14 @@ class TAO_Resource_Factory;
typedef ACE_Unbounded_Set<TAO_Acceptor*>
TAO_AcceptorSet;
+// @@ Fred&Ossama: Even though ye typing fingers may ache the DOC
+// group style (or lack of it) is to call this stuff
+// TAO_AcceptorSetIterator (not Itor).
+// You may want to define this typedef inside the Acceptor_Registry
+// to avoid namespace pollution. This is specially true since you
+// don't export the Iterator (or the set) in the class interface,
+// and it is only used in the implementation.
+//
typedef ACE_Unbounded_Set_Iterator<TAO_Acceptor*>
TAO_AcceptorSetItor;
@@ -78,7 +86,9 @@ public:
int open (TAO_ORB_Core *orb_core);
// Initialize all registered acceptors. Return -1 on error.
-
+ // @@ Fred&Ossama: What is the relationship between the ORB_Core and
+ // the Acceptor_Registry? Is there just one per orb core? Should
+ // tbe acceptor registry know which ORB_Core it belongs to?
private:
TAO_AcceptorSet acceptors_;
diff --git a/TAO/tao/Connect.cpp b/TAO/tao/Connect.cpp
index ac7f0d601b2..3d2a39f76fe 100644
--- a/TAO/tao/Connect.cpp
+++ b/TAO/tao/Connect.cpp
@@ -1416,6 +1416,11 @@ TAO_MT_Client_Connection_Handler::resume_handler (ACE_Reactor *reactor)
// ****************************************************************
+// @@ Fred&Ossama: Could somebody please check up the location of
+// these template instantiations? For example the Hash_Map from
+// ACE_INET_Addr to TAO_Object_Adapter does not seems to belong in
+// this file, maybe in ORB.cpp???
+
#define TAO_SVC_TUPLE ACE_Svc_Tuple<TAO_Client_Connection_Handler>
#define CACHED_CONNECT_STRATEGY ACE_Cached_Connect_Strategy<TAO_Client_Connection_Handler, TAO_SOCK_CONNECTOR, TAO_Cached_Connector_Lock>
#define REFCOUNTED_HASH_RECYCLABLE_ADDR ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr>
diff --git a/TAO/tao/IIOP_Acceptor.cpp b/TAO/tao/IIOP_Acceptor.cpp
index adf76b86c0d..eafaaa979ac 100644
--- a/TAO/tao/IIOP_Acceptor.cpp
+++ b/TAO/tao/IIOP_Acceptor.cpp
@@ -25,6 +25,17 @@ TAO_IIOP_Acceptor::TAO_IIOP_Acceptor (void)
{
}
+// @@ Fred&Ossama: Maybe not for the current round of changes, but
+// shouldn't the acceptor know which version to create?
+// And isn't this the right place to setup the tagged components of
+// a v1.[12] profile?
+
+// @@ Fred&Ossama: We need to check this interface: a single
+// TAO_Acceptor may be bound to multiple addresses (think of a
+// multihomed machine with an acceptor listening on the wildcard
+// address), hence the "Right Thing" seems to be that we pass an
+// MProfile that is filled up by the TAO_Acceptor class.
+
TAO_Profile *
TAO_IIOP_Acceptor::create_profile (TAO_ObjectKey &object_key)
{
@@ -67,8 +78,14 @@ TAO_IIOP_Acceptor::open (TAO_ORB_Core *orb_core,
if (base_acceptor_.acceptor ().get_local_addr (new_address) == -1)
return -1;
+ // @@ Fred&Ossama: Does this call make any sense now? There is
+ // no such thing as the ORB address anymore, right? And if
+ // this is removed then this whole branch of the if()
+ // statement is a noop.
+
// Reset the address
orb_core->orb_params ()->addr (new_address);
+
// iiop_acceptor->acceptor ().enable (ACE_CLOEXEC);
// this is done in the connection handlers open method.
@@ -81,5 +98,3 @@ TAO_IIOP_Acceptor::open (TAO_ORB_Core *orb_core,
}
return 0;
}
-
-
diff --git a/TAO/tao/IIOP_Acceptor.h b/TAO/tao/IIOP_Acceptor.h
index 973e61c8678..8f8c1b5d523 100644
--- a/TAO/tao/IIOP_Acceptor.h
+++ b/TAO/tao/IIOP_Acceptor.h
@@ -25,6 +25,8 @@
#include "tao/Pluggable.h"
#include "tao/Connect.h"
+// @@ Fred&Ossama: Could we make this a typedef inside the
+// IIOP_Acceptor class?
typedef ACE_Strategy_Acceptor<TAO_Server_Connection_Handler,
TAO_SOCK_ACCEPTOR>
TAO_IIOP_BASE_ACCEPTOR;
@@ -39,7 +41,7 @@ class TAO_Export TAO_IIOP_Acceptor : public TAO_Acceptor
//
// = DESCRIPTION
// The IIOP-specific bridge class for the concrete acceptor.
- //
+ //
public:
// TAO_IIOP_Acceptor (ACE_INET_Addr &addr);
// Create Acceptor object using addr.
diff --git a/TAO/tao/IIOP_Connector.cpp b/TAO/tao/IIOP_Connector.cpp
index 8d3d8289756..09c3fcdf4d6 100644
--- a/TAO/tao/IIOP_Connector.cpp
+++ b/TAO/tao/IIOP_Connector.cpp
@@ -223,7 +223,7 @@ TAO_IIOP_Connector::make_profile (const char *endpoint,
//
// or:
//
- // //host:port/object_key
+ // //host:port/object_key
ACE_NEW_RETURN (profile,
TAO_IIOP_Profile (endpoint, ACE_TRY_ENV),
@@ -260,6 +260,7 @@ TAO_IIOP_Connector::check_prefix (const char *endpoint)
// Failure: not an IIOP IOR
// DO NOT throw an exception here.
}
+ // @@ Fred&Ossama: Could we just write return 1 outside the else?
}
diff --git a/TAO/tao/IIOP_Factory.cpp b/TAO/tao/IIOP_Factory.cpp
index 979d933dd51..a07ea60ad7c 100644
--- a/TAO/tao/IIOP_Factory.cpp
+++ b/TAO/tao/IIOP_Factory.cpp
@@ -36,7 +36,7 @@ TAO_IIOP_Protocol_Factory::make_acceptor (void)
return acceptor;
}
-int
+int
TAO_IIOP_Protocol_Factory::init (int argc, char* argv[])
{
return 0;
@@ -62,4 +62,3 @@ ACE_STATIC_SVC_DEFINE (TAO_IIOP_Protocol_Factory,
0)
ACE_FACTORY_DEFINE (TAO, TAO_IIOP_Protocol_Factory)
-
diff --git a/TAO/tao/IIOP_Factory.h b/TAO/tao/IIOP_Factory.h
index 93c39d191d7..07f1f60a5d9 100644
--- a/TAO/tao/IIOP_Factory.h
+++ b/TAO/tao/IIOP_Factory.h
@@ -36,10 +36,11 @@ public:
virtual int init (int argc, char* argv[]);
// Dynamic linking hook
+ // @@ Fred&Ossama: Shouldn't we use a plain const char* here?
virtual int match_prefix (const ACE_CString &prefix);
// verify prefix is a match
- // Factory methods
+ // Factory methods
virtual TAO_Acceptor *make_acceptor (void);
// create an acceptor
diff --git a/TAO/tao/IIOP_Transport.h b/TAO/tao/IIOP_Transport.h
index 9c1b1c6b654..8cbbfbbc7b1 100644
--- a/TAO/tao/IIOP_Transport.h
+++ b/TAO/tao/IIOP_Transport.h
@@ -31,8 +31,8 @@ class TAO_ORB_Core;
class TAO_Export TAO_IIOP_Transport : public TAO_Transport
{
// = TITLE
- // This class acts as a bridge class to the transport specific
- // connection handler (handler_).
+ // This class acts as a bridge class to the transport specific
+ // connection handler (handler_).
//
// = DESCRIPTION
// Specialization of the base TAO_Transport class to handle the IIOP
@@ -40,13 +40,13 @@ class TAO_Export TAO_IIOP_Transport : public TAO_Transport
// the client and server side.
public:
TAO_IIOP_Transport (TAO_IIOP_Handler_Base *handler);
- // Base object's creator method.
+ // Base object's creator method.
~TAO_IIOP_Transport (void);
// Default destructor.
CORBA::ULong tag (void);
- // Returns the specific IOP instance, in this case UIOP.
+ // Returns the specific IOP instance, in this case IIOP.
void close_connection (void);
// Call the corresponding connection handlers handle_close method.
@@ -118,7 +118,7 @@ class TAO_Export TAO_IIOP_Client_Transport : public TAO_IIOP_Transport
// = TITLE
// The Transport class used for Client side communication with a
// server.
- //
+ //
// = DESCRIPTION
// Specialization of the TAO_IIOP_Transport class for client
// side. Methods related to sending one and two way requests
@@ -167,7 +167,7 @@ public:
// Default destructor
TAO_Server_Connection_Handler *server_handler (void);
- // Return a pointer to the underlying connection handler.
+ // Return a pointer to the underlying connection handler.
private:
TAO_Server_Connection_Handler *server_handler_;
diff --git a/TAO/tao/ORB.cpp b/TAO/tao/ORB.cpp
index 9c98f3ea0e6..32ac1994e57 100644
--- a/TAO/tao/ORB.cpp
+++ b/TAO/tao/ORB.cpp
@@ -195,19 +195,11 @@ CORBA_ORB::open (void)
TAO_Server_Strategy_Factory *f =
this->orb_core_->server_factory ();
- // @@ For now we simple assume an IIOP handler, in the future
- // @@ this has to be more general
- // @@ Fred: right, this is my idea for this stuff:
- // Using the Connector Registry try every endpoint listed in the
- // orb_params(), for each one create a TAO_Acceptor [check the
- // Pluggable.h file for a description on how to do that],
- // activate the acceptor with the reactor and insert it in the
- // Acceptor Registry.
TAO_Acceptor_Registry *ar = this->orb_core_->acceptor_registry ();
// get a reference to the acceptor_registry!
- // Initialize the endpoint ... the registry will use the orb_core_
- // to obtain a list of endpoints and strategies!
+ // Initialize all the endpoints ... the registry will use the
+ // orb_core_ to obtain a list of endpoints and strategies!
if (ar->open (this->orb_core_) == -1)
// Need to return an error somehow!! Maybe set do_exit?
@@ -960,14 +952,24 @@ CORBA_ORB::create_stub_object (const TAO_ObjectKey &key,
this->orb_core_->orb_params ();
// @@ Ug, broken. Again, we need to go to the acceptor registry
- // (when we got one) for this!!! [fredk]
+ // (when we got one) for this!!! [fredk]
+ // @@ Fred&Ossama: You guys have one now ;-) I still believe that
+ // the right way to do this is something along these lines:
+ //
+ // size_t pfile_count =
+ // this->orb_core_->acceptor_registry ()->count_profiles ();
+ // TAO_MProfile mp (pfile_count);
+ // this->orb_core_->acceptor_registry ()->fill_mprofile (key);
+ //
+ // What do you think?
+
TAO_IIOP_Profile *pfile;
ACE_NEW_THROW_EX (pfile,
TAO_IIOP_Profile (orb_params->host (),
orb_params->addr ().get_port_number (),
key,
orb_params->addr ()),
- CORBA::NO_MEMORY (TAO_DEFAULT_MINOR_CODE,
+ CORBA::NO_MEMORY (TAO_DEFAULT_MINOR_CODE,
CORBA::COMPLETED_MAYBE));
ACE_CHECK_RETURN (stub);
// we give up the profile to the mp object. If the mp object is deleted,
@@ -1418,7 +1420,14 @@ CORBA_ORB::string_to_object (const char *str,
obj = this->ior_string_to_object (str + sizeof ior_prefix - 1,
ACE_TRY_ENV);
else
- {
+ {
+ // @@ Fred&Ossama: Is there anyway to initialize the mprofile in
+ // such a way that it does not allocate memory?
+ // The connector registry could count how many profiles are
+ // there (if any) and then allocate all the memory in one
+ // call, saving precious microseconds in an area of the code
+ // that is invoked only once ;-)
+
TAO_MProfile mprofile (1);
// It is safe to declare this on the stack since the contents of
// mprofile get copied.
@@ -1842,6 +1851,9 @@ CORBA_ORB::lookup_value_factory (const char *repository_id,
// ****************************************************************
+// @@ Fred&Ossama: I'm convinced that you ended up moving template
+// instantiations from here to the Connect.cpp file.
+
#define CACHED_CONNECT_STRATEGY ACE_Cached_Connect_Strategy<TAO_Client_Connection_Handler, TAO_SOCK_CONNECTOR, TAO_Cached_Connector_Lock>
#define REFCOUNTED_HASH_RECYCLABLE_ADDR ACE_Refcounted_Hash_Recyclable<ACE_INET_Addr>
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index afd3fb661e0..e94095a12db 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -241,12 +241,16 @@ TAO_ORB_Core::init (int &argc, char *argv[])
// per protocol bases. Especially since a IP name will have
// no meaning for say ATM or UNIX domain or Bus based I/O
// @@ Rather than specify a hostname and port number for the
- // server, one or more endpoints should be specified. An
+ // server, one or more endpoints should be specified. An
// endpoint will have the following format:
// IOP:[major.minor]//address1,address2,...,addressn/
// so for IIOP this would be:
// iiop://myhost_ether:5050,myhost_atm:6060/
// fredk.
+ // @@ Fred&Ossama: I think the option should just die or
+ // simply have the same effect as an extra -ORBendpoint
+ // i.e. simply add another endpoin to the list in
+ // orb_params().
// Specify the name of the host (i.e., interface) on which
// the server should listen.
@@ -401,11 +405,11 @@ TAO_ORB_Core::init (int &argc, char *argv[])
// For example, specify -ORBpreconnect once for each protocol
// -ORBpreconnect iiop://tango:10015,watusi:10016/
// -ORBpreconnect busX_iop://board1:0x07450000,board2,0x08450000/
- // Or chain all possible endpoint designations together
+ // Or chain all possible endpoint designations together
// -ORBpreconnect iiop://tango:10015,watusi:10016/,
// busX_iop://board1:0x07450000,board2,0x08450000/
// fredk
- //
+ //
// Get a string which describes the host/port of connections
// we want to cache up-front, thus reducing the latency of
// the first call. It is specified as a comma-separated
@@ -517,7 +521,7 @@ TAO_ORB_Core::init (int &argc, char *argv[])
// Initialize the Service Configurator -check for return values.
// Load the resource factory, connector registry, acceptor registry
- // and protocols. Will need to call the open () method on
+ // and protocols. Will need to call the open () method on
// the registries!
int result = TAO_Internal::open_services (svc_config_argc,
svc_config_argv);
@@ -622,13 +626,13 @@ TAO_ORB_Core::init (int &argc, char *argv[])
this->orb_params ()->use_dotted_decimal_addresses (dotted_decimal_addresses);
- // ** Set up the pluggable protocol infrastructure. First get a
- // pointer to the protocol factories set, then obtain pointers to
+ // ** Set up the pluggable protocol infrastructure. First get a
+ // pointer to the protocol factories set, then obtain pointers to
// all factories loaded by the service configurator.
// Load all protocol factories!
if (trf->init_protocol_factories () == -1)
return -1;
-
+
// init the ORB core's pointer
this->protocol_factories (trf->get_protocol_factories ());
@@ -644,7 +648,7 @@ TAO_ORB_Core::init (int &argc, char *argv[])
if (this->connector_registry ()->open (this) != 0)
return -1;
- // Init acceptor_registry_
+ // Init acceptor_registry_
this->acceptor_registry (trf->get_acceptor_registry ());
if (this->acceptor_registry ()->open (this) == -1)
@@ -685,8 +689,8 @@ TAO_ORB_Core::set_iiop_endpoint ( int dotted_decimal_addresses,
char buffer[MAXHOSTNAMELEN + 1];
- if (rendezvous.addr_to_string (buffer,
- MAXHOSTNAMELEN,
+ if (rendezvous.addr_to_string (buffer,
+ MAXHOSTNAMELEN,
dotted_decimal_addresses) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
@@ -698,7 +702,7 @@ TAO_ORB_Core::set_iiop_endpoint ( int dotted_decimal_addresses,
endpoint.set ("iiop://", 1);
endpoint += buffer;
endpoint += ACE_CString("/");
-
+
// @@ more ugliness .... fredk
this->orb_params ()->addr (rendezvous);
this->orb_params ()->host (host);
diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h
index 49777b70275..5bd0070e24d 100644
--- a/TAO/tao/ORB_Core.h
+++ b/TAO/tao/ORB_Core.h
@@ -24,6 +24,10 @@
#include "tao/Resource_Factory.h"
#include "tao/params.h"
#include "tao/POAC.h"
+
+// @@ Fred&Ossama: In this file you only use pointers
+// TAO_Connector_Registry and Acceptor_Registry, you should forward
+// declare the classes, and not include the complete header file.
#include "tao/Connector_Registry.h"
#include "tao/Acceptor_Registry.h"
@@ -293,7 +297,7 @@ protected:
TAO_Acceptor_Registry *acceptor_registry_;
// The registry which maintains a list of acceptor factories for each
- // loaded protocol.
+ // loaded protocol.
TAO_ProtocolFactorySet *protocol_factories_;
// Pointer to the list of protocol loaded into this ORB instance.
diff --git a/TAO/tao/Pluggable.cpp b/TAO/tao/Pluggable.cpp
index b135b02bcc8..e8766b9fb80 100644
--- a/TAO/tao/Pluggable.cpp
+++ b/TAO/tao/Pluggable.cpp
@@ -49,8 +49,8 @@ TAO_IOP_Version::operator= (const TAO_IOP_Version &src)
return *this;
}
-// Generic Profile
-CORBA::ULong
+// Generic Profile
+CORBA::ULong
TAO_Profile::tag (void) const
{
return this->tag_;
@@ -76,7 +76,7 @@ TAO_Transport::tag (void) const
return this->tag_;
}
-// Connector
+// Connector
TAO_Connector::TAO_Connector (CORBA::ULong tag)
: tag_(tag)
{
@@ -204,7 +204,7 @@ TAO_Connector::make_mprofile (const char *string,
// `1.3//moo/arf'
// `1.3//shu/arf'
// `1.3//chicken/arf'
- //
+ //
// If no version is provided then the string will be of the form:
// `//moo/arf'
@@ -260,7 +260,7 @@ TAO_Connector::make_mprofile (const char *string,
ACE_TRY_ENV) != 0)
{
ACE_THROW_RETURN (CORBA::MARSHAL (), -1);
- // Failure: Problem during profile creation
+ // Failure: Problem during profile creation
}
// Create a Profile using the individual endpoint string
diff --git a/TAO/tao/Pluggable.h b/TAO/tao/Pluggable.h
index 44576d76a69..0990ce5fa50 100644
--- a/TAO/tao/Pluggable.h
+++ b/TAO/tao/Pluggable.h
@@ -158,6 +158,14 @@ public:
// Equality operator
};
+// @@ Fred&Ossama: We need a *concrete* class (something that can be
+// instantiated) that can be used to represent profiles for
+// protocols we don't know. This is required in the spec because
+// we are supposed to preserve foreign profiles when communicating
+// with other ORBs.
+// A simple class with noops for most methods and just the basics
+// required for marshaling and demarshaling is what we need.
+//
class TAO_Export TAO_Profile
{
// = TITLE
@@ -244,6 +252,10 @@ public:
virtual CORBA::ULong _decr_refcnt (void) = 0;
// Decrement the object's reference count. When this count goes to
// 0 this object will be deleted.
+ // @@ Fred&Ossama: guys, reference counting *should* be implemented
+ // in the base class, otherwise you are just going to end up
+ // repeating code and forcing the user to implement things not
+ // directly related to protocols.
virtual ~TAO_Profile (void);
// If you have a virtual method you need a virtual dtor.