blob: b4d1471165f55c80a930866c3a651ccccf79c980 (
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
|
#if !defined (LOG_MESSAGE_RECEIVER_CPP)
#define LOG_MESSAGE_RECEIVER_CPP
#include "ace/Synch.h"
#include "ace/Synch_T.h"
#include "Log_Message_Receiver.h"
// Type based log message receiver
template<ACE_SYNCH_DECL> void
Static_Log_Message_Receiver<ACE_SYNCH_USE>::log_record (char const *hostname,
ACE_Log_Record &record)
{
#if defined (ACE_HAS_THREADS)
static ACE_SYNCH_MUTEX_T lock_;
ACE_Guard<ACE_SYNCH_MUTEX_T> guard (lock_);
#endif /* ACE_HAS_THREADS */
record.print (hostname, 0, stderr);
}
#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
template<ACE_SYNCH_DECL>
ACE_SYNCH_MUTEX_T Log_Message_Receiver_Impl<ACE_SYNCH_USE>::copy_lock_;
#else
static ACE_SYNCH_MUTEX global_copy_lock_;
#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
template<ACE_SYNCH_DECL> inline
Log_Message_Receiver_Impl<ACE_SYNCH_USE>::Log_Message_Receiver_Impl (void)
: count_ (0)
{
}
template<ACE_SYNCH_DECL> inline
Log_Message_Receiver_Impl<ACE_SYNCH_USE> *
Log_Message_Receiver_Impl<ACE_SYNCH_USE>::create (void)
{
return new Log_Message_Receiver_Impl<ACE_SYNCH_USE>;
}
template<ACE_SYNCH_DECL> inline
Log_Message_Receiver_Impl<ACE_SYNCH_USE> *
Log_Message_Receiver_Impl<ACE_SYNCH_USE>::attach (Log_Message_Receiver_Impl<ACE_SYNCH_USE> *body)
{
ACE_ASSERT (body != 0);
#if defined (ACE_HAS_THREADS)
#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
Guard guard (copy_lock_);
#else
// Use the "body"s print lock as copy lock.
ACE_Guard<ACE_SYNCH_MUTEX> guard (global_copy_lock_);
#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
#endif /* ACE_HAS_THREADS */
++body->count_;
return body;
}
template<ACE_SYNCH_DECL> inline void
Log_Message_Receiver_Impl<ACE_SYNCH_USE>::detach(Log_Message_Receiver_Impl<ACE_SYNCH_USE> *body)
{
ACE_ASSERT (body != 0);
#if defined (ACE_HAS_THREADS)
#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
Guard guard (copy_lock_);
#else
// Use the "body"s print lock as copy lock.
ACE_Guard<ACE_SYNCH_MUTEX> guard (global_copy_lock_);
#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
#endif /* ACE_HAS_THREADS */
if (body->count_-- == 0)
delete body;
}
// Type based log message receiver
template<ACE_SYNCH_DECL> inline void
Log_Message_Receiver_Impl<ACE_SYNCH_USE>::log_record (char const *hostname,
ACE_Log_Record &record)
{
ACE_MT (Guard guard (print_lock_));
record.print (hostname, 0, stderr);
}
template<ACE_SYNCH_DECL> inline
Log_Message_Receiver_Impl<ACE_SYNCH_USE>::~Log_Message_Receiver_Impl (void)
{
ACE_ASSERT (count_ == 0 - 1);
}
template<ACE_SYNCH_DECL>
Log_Message_Receiver<ACE_SYNCH_USE>::Log_Message_Receiver (void)
: receiver_impl_ (Log_Message_Receiver_Impl<ACE_SYNCH_USE>::create ())
{
ACE_ASSERT (receiver_impl_ != 0);
}
template<ACE_SYNCH_DECL>
Log_Message_Receiver<ACE_SYNCH_USE>::Log_Message_Receiver
(Log_Message_Receiver<ACE_SYNCH_USE> const &rhs)
: receiver_impl_ (Log_Message_Receiver_Impl<ACE_SYNCH_USE>::attach (rhs.receiver_impl_))
{
ACE_ASSERT (receiver_impl_ != 0);
}
// Type based log message receiver
template<ACE_SYNCH_DECL> void
Log_Message_Receiver<ACE_SYNCH_USE>::log_record(char const *hostname,
ACE_Log_Record &record)
{
ACE_ASSERT (receiver_impl_ != 0);
receiver_impl_->log_record (hostname, record);
}
template<ACE_SYNCH_DECL>
Log_Message_Receiver<ACE_SYNCH_USE>::~Log_Message_Receiver (void)
{
ACE_ASSERT (receiver_impl_ != 0);
Log_Message_Receiver_Impl<ACE_SYNCH_USE>::detach (receiver_impl_);
}
#endif /* LOG_MESSAGE_RECEIVER_CPP */
|