From 0ba583aa35bccf268e30dd03a6d423df5f98b40e Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sat, 13 Feb 2016 16:30:08 +0100 Subject: Reimplement locking in `Logger::append` --- src/change_log.cc | 20 ++++++++------------ src/utility/logger.h | 27 +++++++++++++++++---------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/change_log.cc b/src/change_log.cc index 8ff99e4..ae28079 100644 --- a/src/change_log.cc +++ b/src/change_log.cc @@ -1,7 +1,3 @@ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - #include "actual_function.h" #include "utility/io.h" @@ -83,6 +79,14 @@ ssize_t writev(int fd, const iovec* iov, int iovcnt) { return actual::writev(fd, iov, iovcnt); } +void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset) { + if ( prot & PROT_WRITE ) { + track_write(fd); + } + + return actual::mmap(addr, length, prot, flags, fd, offset); +} + int rename(const char* old_path, const char* new_path) { track_rename(old_path, new_path); @@ -110,11 +114,3 @@ int unlinkat(int dirfd, const char* path, int flags) { return actual::unlinkat(dirfd, path, flags); } - -void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset) { - if ( prot & PROT_WRITE ) { - track_write(fd); - } - - return actual::mmap(addr, length, prot, flags, fd, offset); -} diff --git a/src/utility/logger.h b/src/utility/logger.h index 49b7cc1..0dd88a6 100644 --- a/src/utility/logger.h +++ b/src/utility/logger.h @@ -15,25 +15,32 @@ class Logger { buffer_(target_fd, std::ios::out), stream_(&this->buffer_) { } - template - inline void append(Head&& head) { - this->stream_ << head << std::endl; - } + void forward(boost::process::pistream&); - template - inline void append(Head&& head, Tail&&... tail) { - this->stream_ << head; + template + void append(Arguments&&... args) { + std::lock_guard guard(this->write_mutex_); - this->append(std::forward(tail)...); + this->append_to_stream(std::forward(args)...); } - void forward(boost::process::pistream&); - private: __gnu_cxx::stdio_filebuf buffer_; std::ostream stream_; std::mutex write_mutex_; + template + inline void append_to_stream(Head&& head) { + this->stream_ << head << std::endl; + } + + template + inline void append_to_stream(Head&& head, Tail&&... tail) { + this->stream_ << head; + + this->append_to_stream(std::forward(tail)...); + } + }; } -- cgit v1.2.3