Skip to content

Commit 1449a9d

Browse files
committed
error_logs: abort or throw exception even with custom log-handler
1 parent 216f9ec commit 1449a9d

File tree

1 file changed

+53
-56
lines changed

1 file changed

+53
-56
lines changed

src/base/kaldi-error.cc

Lines changed: 53 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -163,66 +163,63 @@ void MessageLogger::HandleMessage(const LogMessageEnvelope &envelope,
163163
// Send to a logging handler if provided.
164164
if (g_log_handler != NULL) {
165165
g_log_handler(envelope, message);
166-
// TODO: should we abort() at 'assert_failed' or 'error'?
167-
return;
168-
}
169-
// Otherwise, we use the default Kaldi logging.
170-
171-
// Build the log-message 'header',
172-
std::stringstream header;
173-
if (envelope.severity > LogMessageEnvelope::kInfo) {
174-
header << "VLOG[" << envelope.severity << "] (";
175166
} else {
176-
switch (envelope.severity) {
177-
case LogMessageEnvelope::kInfo :
178-
header << "LOG (";
179-
break;
180-
case LogMessageEnvelope::kWarning :
181-
header << "WARNING (";
182-
break;
183-
case LogMessageEnvelope::kError :
184-
header << "ERROR (";
185-
break;
186-
case LogMessageEnvelope::kAssertFailed :
187-
header << "ASSERTION_FAILED (";
188-
break;
189-
default:
190-
abort(); // coding errror (unknown 'severity'),
167+
// Otherwise, we use the default Kaldi logging.
168+
// Build the log-message 'header',
169+
std::stringstream header;
170+
if (envelope.severity > LogMessageEnvelope::kInfo) {
171+
header << "VLOG[" << envelope.severity << "] (";
172+
} else {
173+
switch (envelope.severity) {
174+
case LogMessageEnvelope::kInfo :
175+
header << "LOG (";
176+
break;
177+
case LogMessageEnvelope::kWarning :
178+
header << "WARNING (";
179+
break;
180+
case LogMessageEnvelope::kError :
181+
header << "ERROR (";
182+
break;
183+
case LogMessageEnvelope::kAssertFailed :
184+
header << "ASSERTION_FAILED (";
185+
break;
186+
default:
187+
abort(); // coding errror (unknown 'severity'),
188+
}
191189
}
192-
}
193-
// fill the other info from the envelope,
194-
header << GetProgramName() << envelope.func << "():"
195-
<< envelope.file << ':' << envelope.line << ")";
196-
197-
// In following lines we decide what to do,
198-
if (envelope.severity >= LogMessageEnvelope::kWarning) {
199-
// VLOG, LOG, WARNING:
200-
// print to stderr,
201-
fprintf(stderr, "%s %s\n", header.str().c_str(), message);
202-
} else if (envelope.severity == LogMessageEnvelope::kError) {
203-
// ERROR:
204-
// print to stderr (with stack-trace),
205-
fprintf(stderr, "%s %s\n\n%s\n", header.str().c_str(), message,
206-
KaldiGetStackTrace().c_str());
207-
if (!std::uncaught_exception()) {
208-
// throw exception with empty message,
209-
throw std::runtime_error("");
190+
// fill the other info from the envelope,
191+
header << GetProgramName() << envelope.func << "():"
192+
<< envelope.file << ':' << envelope.line << ")";
193+
194+
// Printing the message,
195+
if (envelope.severity >= LogMessageEnvelope::kWarning) {
196+
// VLOG, LOG, WARNING:
197+
fprintf(stderr, "%s %s\n", header.str().c_str(), message);
210198
} else {
211-
// If we got here, this thread has already thrown exception,
212-
// and this exception has not yet arrived to its 'catch' clause...
213-
// Throwing a new exception would be unsafe!
214-
// (can happen during 'stack unwinding', if we have 'KALDI_ERR << msg'
215-
// in a destructor of some local object).
216-
abort();
199+
// ERROR, ASSERT_FAILED (print with stack-trace):
200+
fprintf(stderr, "%s %s\n\n%s\n", header.str().c_str(), message,
201+
KaldiGetStackTrace().c_str());
217202
}
218-
} else if (envelope.severity == LogMessageEnvelope::kAssertFailed) {
219-
// ASSERT_FAILED:
220-
// print to stderr (with stack-trace), call abort(),
221-
fprintf(stderr, "%s %s\n\n%s\n", header.str().c_str(), message,
222-
KaldiGetStackTrace().c_str());
223-
abort();
224-
} else {
225-
abort(); // coding error (unknown 'severity'),
203+
}
204+
205+
// Should we throw exception, or abort?
206+
switch (envelope.severity) {
207+
case LogMessageEnvelope::kAssertFailed:
208+
abort(); // ASSERT_FAILED,
209+
break;
210+
case LogMessageEnvelope::kError:
211+
if (!std::uncaught_exception()) {
212+
// throw exception with empty message,
213+
throw std::runtime_error(""); // KALDI_ERR,
214+
} else {
215+
// If we got here, this thread has already thrown exception,
216+
// and this exception has not yet arrived to its 'catch' clause...
217+
// Throwing a new exception would be unsafe!
218+
// (can happen during 'stack unwinding', if we have 'KALDI_ERR << msg'
219+
// in a destructor of some local object).
220+
abort();
221+
}
222+
break;
226223
}
227224
}
228225

0 commit comments

Comments
 (0)