diff --git a/repos/base/include/base/log.h b/repos/base/include/base/log.h
index 1e4d9e4bf3..89d00d32b6 100644
--- a/repos/base/include/base/log.h
+++ b/repos/base/include/base/log.h
@@ -15,6 +15,7 @@
#define _INCLUDE__BASE__LOG_H_
#include
+#include
#include
#include
@@ -107,23 +108,29 @@ class Genode::Trace_output
{
private:
- Mutex _mutex { };
+ struct Write_trace_fn
+ {
+ void operator () (char const *);
+ };
- Output &_output;
-
- void _acquire();
- void _release();
+ /* cannot include log_session.h here because of recursion */
+ enum { LOG_SESSION_MAX_STRING_LEN = 232 };
+ typedef Buffered_output
+ Buffered_trace_output;
public:
- Trace_output(Output &output) : _output(output) { }
+ Trace_output() { }
template
void output(ARGS &&... args)
{
- _acquire();
- Output::out_args(_output, args...);
- _release();
+ Buffered_trace_output buffered_trace_output
+ { Write_trace_fn() };
+
+ Output::out_args(buffered_trace_output, args...);
+ buffered_trace_output.out_string("\n");
}
/**
diff --git a/repos/base/lib/symbols/ld b/repos/base/lib/symbols/ld
index 7c50906994..4d47f01de2 100644
--- a/repos/base/lib/symbols/ld
+++ b/repos/base/lib/symbols/ld
@@ -73,8 +73,7 @@ _ZN6Genode11Sliced_heapD2Ev T
_ZN6Genode12Address_infoC1Em T
_ZN6Genode12Address_infoC2Em T
_ZN6Genode12Trace_output12trace_outputEv T
-_ZN6Genode12Trace_output8_acquireEv T
-_ZN6Genode12Trace_output8_releaseEv T
+_ZN6Genode12Trace_output14Write_trace_fnclEPKc T
_ZN6Genode13Avl_node_base15_rotate_subtreeEPS0_bRNS0_6PolicyE T
_ZN6Genode13Avl_node_base18_rebalance_subtreeEPS0_RNS0_6PolicyE T
_ZN6Genode13Avl_node_base6_adoptEPS0_bRNS0_6PolicyE T
diff --git a/repos/base/src/lib/base/default_log.cc b/repos/base/src/lib/base/default_log.cc
index 598dd457b5..161b9144cd 100644
--- a/repos/base/src/lib/base/default_log.cc
+++ b/repos/base/src/lib/base/default_log.cc
@@ -114,14 +114,6 @@ void Genode::init_log(Parent &parent)
log_ptr = unmanaged_singleton(*buffered_log_output);
/* enable trace back end */
- struct Write_trace_fn { void operator () (char const *s) { Thread::trace(s); } };
-
- typedef Buffered_output
- Buffered_trace_output;
-
- static Buffered_trace_output *buffered_trace_output =
- unmanaged_singleton(Write_trace_fn());
-
- trace_ptr = unmanaged_singleton(*buffered_trace_output);
+ trace_ptr = unmanaged_singleton();
}
diff --git a/repos/base/src/lib/base/log.cc b/repos/base/src/lib/base/log.cc
index 978414ddce..ef0bffac5f 100644
--- a/repos/base/src/lib/base/log.cc
+++ b/repos/base/src/lib/base/log.cc
@@ -13,6 +13,7 @@
/* Genode includes */
#include
+#include
using namespace Genode;
@@ -61,18 +62,7 @@ void Raw::_release()
}
-void Trace_output::_acquire()
+void Trace_output::Write_trace_fn::operator () (char const *s)
{
- _mutex.acquire();
-}
-
-
-void Trace_output::_release()
-{
- /*
- * Add newline
- */
- _output.out_string("\n");
-
- _mutex.release();
+ Thread::trace(s);
}
diff --git a/repos/os/src/server/log_terminal/main.cc b/repos/os/src/server/log_terminal/main.cc
index 4ce160a66b..36e431aba3 100644
--- a/repos/os/src/server/log_terminal/main.cc
+++ b/repos/os/src/server/log_terminal/main.cc
@@ -24,6 +24,7 @@ namespace Terminal {
class Session_component;
class Root_component;
class Main;
+ class Buffered_output;
using namespace Genode;
};
@@ -32,7 +33,7 @@ namespace Terminal {
/**
* Utility for the buffered output of small successive write operations
*/
-class Buffered_output
+class Terminal::Buffered_output
{
private: