22 #include "JackMessageBuffer.h"
23 #include "JackGlobals.h"
24 #include "JackError.h"
29 JackMessageBuffer* JackMessageBuffer::fInstance = NULL;
31 JackMessageBuffer::JackMessageBuffer()
32 :fInit(NULL),fInitArg(NULL),fThread(this),fInBuffer(0),fOutBuffer(0),fOverruns(0),fRunning(false)
35 JackMessageBuffer::~JackMessageBuffer()
38 void JackMessageBuffer::Start()
44 void JackMessageBuffer::Stop()
47 jack_error(
"WARNING: %d message buffer overruns!", fOverruns);
49 jack_log(
"no message buffer overruns");
64 void JackMessageBuffer::Flush()
66 while (fOutBuffer != fInBuffer) {
67 jack_log_function(fBuffers[fOutBuffer].level, fBuffers[fOutBuffer].message);
68 fOutBuffer = MB_NEXT(fOutBuffer);
72 void JackMessageBuffer::AddMessage(
int level,
const char *message)
74 if (fGuard.Trylock()) {
75 fBuffers[fInBuffer].level = level;
76 strncpy(fBuffers[fInBuffer].message, message, MB_BUFFERSIZE);
77 fInBuffer = MB_NEXT(fInBuffer);
81 INC_ATOMIC(&fOverruns);
85 bool JackMessageBuffer::Execute()
107 jack_error(
"JackMessageBuffer::Execute lock cannot be taken");
113 void JackMessageBuffer::Create()
115 if (fInstance == NULL) {
116 fInstance =
new JackMessageBuffer();
121 void JackMessageBuffer::Destroy()
123 if (fInstance != NULL) {
130 void JackMessageBufferAdd(
int level,
const char *message)
132 if (Jack::JackMessageBuffer::fInstance == NULL) {
134 jack_log_function(LOG_LEVEL_ERROR,
"messagebuffer not initialized, skip message");
136 Jack::JackMessageBuffer::fInstance->AddMessage(level, message);
140 void JackMessageBuffer::SetInitCallback(JackThreadInitCallback callback,
void *arg)
153 jack_error(
"JackMessageBuffer::SetInitCallback lock cannot be taken");