28
28
#include " logging/logHandle.hpp"
29
29
#include " runtime/atomic.hpp"
30
30
31
- Semaphore AsyncLogWriter::_sem (0 );
32
- Semaphore AsyncLogWriter::_io_sem (1 );
33
-
34
- class AsyncLogLocker : public StackObj {
35
- private:
36
- static Semaphore _lock;
31
+ class AsyncLogWriter ::AsyncLogLocker : public StackObj {
37
32
public:
38
33
AsyncLogLocker () {
39
- _lock.wait ();
34
+ assert (_instance != nullptr , " AsyncLogWriter::_lock is unavailable" );
35
+ _instance->_lock .wait ();
40
36
}
41
37
42
38
~AsyncLogLocker () {
43
- _lock.signal ();
39
+ _instance-> _lock .signal ();
44
40
}
45
41
};
46
42
47
- Semaphore AsyncLogLocker::_lock (1 );
48
-
49
43
void AsyncLogWriter::enqueue_locked (const AsyncLogMessage& msg) {
50
44
if (_buffer.size () >= _buffer_max_size) {
51
45
bool p_created;
@@ -64,15 +58,15 @@ void AsyncLogWriter::enqueue(LogFileOutput& output, const LogDecorations& decora
64
58
AsyncLogMessage m (output, decorations, os::strdup (msg));
65
59
66
60
{ // critical area
67
- AsyncLogLocker lock ;
61
+ AsyncLogLocker locker ;
68
62
enqueue_locked (m);
69
63
}
70
64
}
71
65
72
66
// LogMessageBuffer consists of a multiple-part/multiple-line messsage.
73
67
// The lock here guarantees its integrity.
74
68
void AsyncLogWriter::enqueue (LogFileOutput& output, LogMessageBuffer::Iterator msg_iterator) {
75
- AsyncLogLocker lock ;
69
+ AsyncLogLocker locker ;
76
70
77
71
for (; !msg_iterator.is_at_end (); msg_iterator++) {
78
72
AsyncLogMessage m (output, msg_iterator.decorations (), os::strdup (msg_iterator.message ()));
@@ -81,7 +75,8 @@ void AsyncLogWriter::enqueue(LogFileOutput& output, LogMessageBuffer::Iterator m
81
75
}
82
76
83
77
AsyncLogWriter::AsyncLogWriter ()
84
- : _initialized(false ),
78
+ : _lock(1 ), _sem(0 ), _io_sem(1 ),
79
+ _initialized(false ),
85
80
_stats(17 /* table_size*/ ) {
86
81
if (os::create_thread (this , os::asynclog_thread)) {
87
82
_initialized = true ;
@@ -125,7 +120,7 @@ void AsyncLogWriter::write() {
125
120
bool own_io = false ;
126
121
127
122
{ // critical region
128
- AsyncLogLocker lock ;
123
+ AsyncLogLocker locker ;
129
124
130
125
_buffer.pop_all (&logs);
131
126
// append meta-messages of dropped counters
0 commit comments