Browse Source

logger: fix resource leaks in LogWriter

sbg
Beat Küng 9 years ago committed by Lorenz Meier
parent
commit
da1e63eaf3
  1. 17
      src/modules/logger/log_writer.cpp
  2. 4
      src/modules/logger/log_writer.h

17
src/modules/logger/log_writer.cpp

@ -52,8 +52,8 @@ LogWriter::LogWriter(size_t buffer_size) : @@ -52,8 +52,8 @@ LogWriter::LogWriter(size_t buffer_size) :
pthread_mutex_init(&_mtx, nullptr);
pthread_cond_init(&_cv, nullptr);
/* allocate write performance counters */
perf_write = perf_alloc(PC_ELAPSED, "sd write");
perf_fsync = perf_alloc(PC_ELAPSED, "sd fsync");
_perf_write = perf_alloc(PC_ELAPSED, "sd write");
_perf_fsync = perf_alloc(PC_ELAPSED, "sd fsync");
}
bool LogWriter::init()
@ -69,6 +69,11 @@ bool LogWriter::init() @@ -69,6 +69,11 @@ bool LogWriter::init()
LogWriter::~LogWriter()
{
pthread_mutex_destroy(&_mtx);
pthread_cond_destroy(&_cv);
perf_free(_perf_write);
perf_free(_perf_fsync);
if (_buffer) {
delete[] _buffer;
}
@ -185,15 +190,15 @@ void LogWriter::run() @@ -185,15 +190,15 @@ void LogWriter::run()
written = 0;
if (available > 0) {
perf_begin(perf_write);
perf_begin(_perf_write);
written = ::write(_fd, read_ptr, available);
perf_end(perf_write);
perf_end(_perf_write);
/* call fsync periodically to minimize potential loss of data */
if (++poll_count >= 100) {
perf_begin(perf_fsync);
perf_begin(_perf_fsync);
::fsync(_fd);
perf_end(perf_fsync);
perf_end(_perf_fsync);
poll_count = 0;
}

4
src/modules/logger/log_writer.h

@ -128,8 +128,8 @@ private: @@ -128,8 +128,8 @@ private:
bool _exit_thread = false;
pthread_mutex_t _mtx;
pthread_cond_t _cv;
perf_counter_t perf_write;
perf_counter_t perf_fsync;
perf_counter_t _perf_write;
perf_counter_t _perf_fsync;
};
}

Loading…
Cancel
Save