summaryrefslogtreecommitdiff
path: root/TAO/tao/Thread_Lane_Resources.h
blob: 307dee679bd074970a522cca22e5247ef9d8daad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
// -*- C++ -*-

//=============================================================================
/**
 *  @file    Thread_Lane_Resources.h
 *
 *  $Id$
 *
 *  @author  Irfan Pyarali
 */
// ===================================================================

#ifndef TAO_THREAD_LANE_RESOURCES_H
#define TAO_THREAD_LANE_RESOURCES_H

#include /**/ "ace/pre.h"
#include "ace/CORBA_macros.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "ace/Thread_Mutex.h"

#include "tao/TAO_Export.h"
#include "tao/orbconf.h"
#include "params.h"

class ACE_Allocator;

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

class TAO_ORB_Core;
class TAO_Acceptor_Registry;
class TAO_Leader_Follower;
class TAO_MProfile;
class TAO_New_Leader_Generator;
class TAO_Connector_Registry;
class TAO_Resource_Factory;

namespace CORBA
{
  class Environment;
}

namespace TAO
{
  class Transport_Cache_Manager;
}

/**
 * @class TAO_Thread_Lane_Resources
 *
 * @brief Class representing a thread lane's resources.
 *
 * \nosubgrouping
 *
 **/
class TAO_Export TAO_Thread_Lane_Resources
{
public:
  /// Constructor.
  TAO_Thread_Lane_Resources (
      TAO_ORB_Core &orb_core,
      TAO_New_Leader_Generator *new_leader_generator = 0);

  /// Destructor.
  ~TAO_Thread_Lane_Resources (void);

  // Does @a mprofile belong to us?
  int is_collocated (const TAO_MProfile &mprofile);

  /// Open the acceptor registry.
  int open_acceptor_registry (const TAO_EndpointSet &endpoint_set,
                              bool ignore_address
                              ACE_ENV_ARG_DECL);

  /// Finalize resources.
  void finalize (void);

  /// Shutdown the reactor.
  void shutdown_reactor (void);

  /// Certain ORB policies such as dropping replies on shutdown with
  /// RW connection handlers would need cleanup of transports to wake
  /// threads up.
  void cleanup_rw_transports (void);

  /// @named Accessors
  //@{

  TAO_Acceptor_Registry &acceptor_registry (void);

  /*
   * @note Returning a pointer helps to return 0 in case of
   * exceptions.
   */
  TAO_Connector_Registry *connector_registry (ACE_ENV_SINGLE_ARG_DECL);

  TAO::Transport_Cache_Manager &transport_cache (void);

  TAO_Leader_Follower &leader_follower (void);

  /* Allocator is intended for allocating the ACE_Data_Blocks used in
   * incoming CDR streams.  This allocator has locks.
   */
  ACE_Allocator *input_cdr_dblock_allocator (void);

  /* Allocator is intended for allocating the buffers in the incoming
   * CDR streams.  This allocator has locks.
   */
  ACE_Allocator *input_cdr_buffer_allocator (void);

  /* Allocator is intended for allocating the ACE_Message_Blocks used
   * in incoming CDR streams.  This allocator is global, and has locks.
   */
  ACE_Allocator *input_cdr_msgblock_allocator (void);

  /* Allocator is intended for allocating the buffers used in the
   * Transport object. This allocator has locks.
   */
  ACE_Allocator *transport_message_buffer_allocator (void);

  /* Allocator is intended for allocating the ACE_Data_Blocks used in
   * outgoing CDR streams.  This allocator has locks.
   */
  ACE_Allocator *output_cdr_dblock_allocator (void);

  /* Allocator is intended for allocating the buffers in the outgoing
   * CDR streams.  This allocator has locks.
   */
  ACE_Allocator *output_cdr_buffer_allocator (void);

  /* Allocator is intended for allocating the ACE_Message_Blocks used
   * in the outgoing CDR streams.  This allocator is global, and has
   * locks.
   */
  ACE_Allocator *output_cdr_msgblock_allocator (void);

  /* Allocator is intended for allocating the AMH response handlers
   * This allocator is global.
   */
  ACE_Allocator *amh_response_handler_allocator (void);

  /* Allocator is intended for allocating the AMI response handlers
   * This allocator is global.
   */
  ACE_Allocator *ami_response_handler_allocator (void);
  //@}

private:

  /// Checks if the acceptor registry has been created.
  int has_acceptor_registry_been_created (void) const;

  /// Helper to get the resource factory in the ORB_Core
  TAO_Resource_Factory *resource_factory (void);

private:
  /// ORB_Core related to this thread lane.
  TAO_ORB_Core &orb_core_;

  /// The registry which maintains a list of acceptor factories for
  /// each loaded protocol.
  TAO_Acceptor_Registry *acceptor_registry_;

  /// The connector registry which all active connectors must register
  /// themselves with.
  TAO_Connector_Registry *connector_registry_;

  /// Transport cache.
  TAO::Transport_Cache_Manager *transport_cache_;

  /// The leader/followers management class for this lane.
  TAO_Leader_Follower *leader_follower_;

  /// Synchronization.
  TAO_SYNCH_MUTEX lock_;

  /// Generator of new leader threads.
  TAO_New_Leader_Generator *new_leader_generator_;

  /// @name The allocators for the input CDR streams.
  //@{
  ACE_Allocator *input_cdr_dblock_allocator_;
  ACE_Allocator *input_cdr_buffer_allocator_;
  ACE_Allocator *input_cdr_msgblock_allocator_;
  //@}

  /// @name The allocators for the buffering messages in the transport.
  //@{
  ACE_Allocator *transport_message_buffer_allocator_;
  //@}

  /// @name The allocators for the output CDR streams.
  //@{
  ACE_Allocator *output_cdr_dblock_allocator_;
  ACE_Allocator *output_cdr_buffer_allocator_;
  ACE_Allocator *output_cdr_msgblock_allocator_;
  //@}

  /// @name The allocators for AMH.
  //@{
  ACE_Allocator *amh_response_handler_allocator_;
  //@}

  /// @name The allocators for AMI.
  //@{
  ACE_Allocator *ami_response_handler_allocator_;
  //@}
};

TAO_END_VERSIONED_NAMESPACE_DECL

#include /**/ "ace/post.h"

#endif /* TAO_THREAD_LANE_RESOURCES_H */