summaryrefslogtreecommitdiff
path: root/netsvcs/lib/Log_Message_Receiver.cpp
blob: 03fccfea3b2282f26765585106064b2391383f7d (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
#include "Log_Message_Receiver.h"

// Type based log message receiver.
template<ACE_SYNCH_1> void
Static_Log_Message_Receiver<ACE_SYNCH_2>::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);
};

template<ACE_SYNCH_1>
ACE_SYNCH_MUTEX_T Log_Message_Receiver_Impl<ACE_SYNCH_2>::copy_lock_;

template<ACE_SYNCH_1> inline 
Log_Message_Receiver_Impl<ACE_SYNCH_2>::Log_Message_Receiver_Impl (void) 
  : count_ (0)
{
}

template<ACE_SYNCH_1> inline Log_Message_Receiver_Impl<ACE_SYNCH_2> *
Log_Message_Receiver_Impl<ACE_SYNCH_2>::create (void)
{
  return new Log_Message_Receiver_Impl<ACE_SYNCH_2>;
}

template<ACE_SYNCH_1> inline
Log_Message_Receiver_Impl<ACE_SYNCH_2> *
Log_Message_Receiver_Impl<ACE_SYNCH_2>::attach (Log_Message_Receiver_Impl<ACE_SYNCH_2> *body)
{
  assert(body != 0);
  
  Guard guard(copy_lock_);
  ++body->count_;
  return body;
}

template<ACE_SYNCH_1> inline void
Log_Message_Receiver_Impl<ACE_SYNCH_2>::detach (Log_Message_Receiver_Impl<ACE_SYNCH_2> *body)
{
  assert(body != 0);
  
  Guard guard(copy_lock_);
  
  if (body->count_-- == 0)
    delete body;
}

// Type based log message receiver
template<ACE_SYNCH_1> inline void
Log_Message_Receiver_Impl<ACE_SYNCH_2>::log_record (char const *hostname, 
						    ACE_Log_Record &record)
{
  ACE_MT (Guard guard (print_lock_));
  record.print (hostname, 0, stderr);
};

template<ACE_SYNCH_1> inline 
Log_Message_Receiver_Impl<ACE_SYNCH_2>::~Log_Message_Receiver_Impl (void)
{
  assert (count_ == 0 - 1);
}

template<ACE_SYNCH_1>
Log_Message_Receiver<ACE_SYNCH_2>::Log_Message_Receiver (void) 
  : receiver_impl_ (Log_Message_Receiver_Impl<ACE_SYNCH_2>::create ())
{
  assert (receiver_impl_ != 0);  
}

template<ACE_SYNCH_1> 
Log_Message_Receiver<ACE_SYNCH_2>::Log_Message_Receiver (const Log_Message_Receiver<ACE_SYNCH_2>& lhs) 
  : receiver_impl_ (Log_Message_Receiver_Impl<ACE_SYNCH_2>::attach (lhs.receiver_impl_))
{
  assert (receiver_impl_ != 0);  
}

// Type based log message receiver
template<ACE_SYNCH_1> void
Log_Message_Receiver<ACE_SYNCH_2>::log_record (char const *hostname,
					       ACE_Log_Record &record)
{
  assert (receiver_impl_ != 0);  
  receiver_impl_->log_record (hostname, record);
}

template<ACE_SYNCH_1>
Log_Message_Receiver<ACE_SYNCH_2>::~Log_Message_Receiver (void)
{
  assert (receiver_impl_ != 0);  
  Log_Message_Receiver_Impl<ACE_SYNCH_2>::detach (receiver_impl_);
}