diff options
| -rw-r--r-- | src/include/sys/task.h | 6 | ||||
| -rw-r--r-- | src/lib/assert.C | 16 |
2 files changed, 14 insertions, 8 deletions
diff --git a/src/include/sys/task.h b/src/include/sys/task.h index 0627784f1..b86b6f4ec 100644 --- a/src/include/sys/task.h +++ b/src/include/sys/task.h @@ -77,6 +77,12 @@ void task_end() NO_RETURN; */ void task_end2(void* retval) NO_RETURN; +/** @define task_crash + * @brief End the calling task as if it crashed. + * + */ +#define task_crash() ((*(char*)NULL) = 'F') + /** @fn task_gettid * @brief Get task ID of calling task. * diff --git a/src/lib/assert.C b/src/lib/assert.C index 591630f14..7b8318ae3 100644 --- a/src/lib/assert.C +++ b/src/lib/assert.C @@ -38,9 +38,9 @@ extern "C" void __assert(AssertBehavior i_assertb, int i_line) switch (i_assertb) { case ASSERT_TRACE_DONE: // Custom trace was provided. - task_end(); + task_crash(); break; - + case ASSERT_TRACE_NOTDONE: // Do a normal trace. if (NULL != TRACE::traceCallback) { @@ -51,23 +51,23 @@ extern "C" void __assert(AssertBehavior i_assertb, int i_line) printk("Assertion failed @%p on line %d.\n", linkRegister(), i_line); } - task_end(); + task_crash(); break; case ASSERT_CRITICAL: // Critical task, trace not available. - printk("Assertion failed @%p on line %d.\n", + printk("Assertion failed @%p on line %d.\n", linkRegister(), i_line); - task_end(); + task_crash(); break; - + case ASSERT_KERNEL: // Kernel assert called. - printk("Assertion failed @%p on line %d.\n", + printk("Assertion failed @%p on line %d.\n", linkRegister(), i_line); break; } // Loop forever if we make it here. Should only happen in kernel code. - while (true) + while (true) { setThreadPriorityLow(); } |

