blob: 645a612fe9cc8261c1d49dd5885e61a5fb562b50 (
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
|
// -*- C++ -*-
// ===================================================================
/**
* @file TSS_Resources.h
*
* @author DOC Group - ISIS at Vanderbilt University
* @author DOC Center - Washington University at St. Louis
* @author DOC Laboratory - University of California at Irvine
*/
// ===================================================================
#ifndef TAO_TAO_TSS_RESOURCES_H
#define TAO_TAO_TSS_RESOURCES_H
#include /**/ "ace/pre.h"
#include /**/ "tao/TAO_Export.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "tao/Environment.h"
#include "tao/Policy_Current_Impl.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
// Forward declarations
namespace TAO
{
class GUIResource_Factory;
class Transport_Selection_Guard;
}
/**
* @class TAO_TSS_Resources
*
* @brief The TSS resoures shared by all the ORBs
*
* This class is used by TAO to store the resources that are
* thread-specific but are *not* ORB specific. The members are public
* because only the ORB Core is expected to access them.
*/
class TAO_Export TAO_TSS_Resources
{
public:
/// Constructor
TAO_TSS_Resources ();
/// Destructor
~TAO_TSS_Resources ();
/// Return a singleton instance of this class.
static TAO_TSS_Resources * instance ();
private:
/// Do not copy TSS resources
//@{
TAO_TSS_Resources (const TAO_TSS_Resources&);
void operator= (const TAO_TSS_Resources&);
//@}
public:
/**
* Points to structure containing state for the current upcall
* context in this thread. Note that it does not come from the
* resource factory because it must always be held in
* thread-specific storage. For now, since TAO_ORB_Core instances
* are TSS singletons, we simply ride along and don't allocate
* occupy another TSS slot since there are some platforms where
* those are precious commodities (e.g., NT).
*/
void * poa_current_impl_;
void * rtscheduler_current_impl_;
void * rtscheduler_previous_current_impl_;
/// The CORBA priority of the thread if set via RTCORBA::Current.
/// RTCORBA::minPriority - 1 otherwise.
CORBA::Short rtcorba_current_priority_;
/// The default environment for the thread.
CORBA::Environment * default_environment_;
/// If the user (or library) provides no environment the ORB_Core
/// still holds one.
CORBA::Environment tss_environment_;
#if (TAO_HAS_CORBA_MESSAGING == 1)
/// The initial PolicyCurrent for this thread. Should be a TSS
/// resource.
TAO_Policy_Current_Impl initial_policy_current_;
/// This pointer is reset by the POA on each upcall.
TAO_Policy_Current_Impl * policy_current_;
#endif /* TAO_HAS_CORBA_MESSAGING == 1 */
/// A factory for creating GUIReactors.
/**
* @c GUIResource_Factory has to be stored in TSS, as GUIReactors
* are operational only in within the context of GUI event loops.
*/
TAO::GUIResource_Factory * gui_resource_factory_;
#if TAO_HAS_TRANSPORT_CURRENT == 1
/// A TSS for a pointer to the current transport guard (see
/// below). The guard keeps track of the Transport, if any that has
/// been selected for use by the current thread, in the context of
/// an upcall or client-side interceptor.
TAO::Transport_Selection_Guard* tsg_;
#endif /* TAO_HAS_TRANSPORT_CURRENT == 1 */
};
TAO_END_VERSIONED_NAMESPACE_DECL
#include /**/ "ace/post.h"
#endif /* TAO_TSS_RESOURCES_H */
|