Repository: incubator-mynewt-core Updated Branches: refs/heads/develop c5c9b6e2e -> f34f225dd
MYNEWT-630: Connection supervision timeout with high throughput The issue was found to be an error in the os scheduler code. If the PendSV handler was interrupted at a certain point when we were checking to see if a context switch could occur, the code is os_sched would think no context switch was necessary. This is now fixed and the high throughput test has been running for quite some time now with no disconnect. Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/f34f225d Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/f34f225d Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/f34f225d Branch: refs/heads/develop Commit: f34f225ddc1b87cf49a5dde17dd5e4ea6f8169a0 Parents: c5c9b6e Author: William San Filippo <wi...@runtime.io> Authored: Fri Feb 24 20:19:42 2017 -0800 Committer: William San Filippo <wi...@runtime.io> Committed: Fri Feb 24 20:19:42 2017 -0800 ---------------------------------------------------------------------- kernel/os/src/os_sched.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f34f225d/kernel/os/src/os_sched.c ---------------------------------------------------------------------- diff --git a/kernel/os/src/os_sched.c b/kernel/os/src/os_sched.c index 0cbe615..bb710ba 100644 --- a/kernel/os/src/os_sched.c +++ b/kernel/os/src/os_sched.c @@ -83,16 +83,11 @@ err: void os_sched_ctx_sw_hook(struct os_task *next_t) { - if (g_current_task == next_t) { - return; - } - next_t->t_ctx_sw_cnt++; g_current_task->t_run_time += g_os_time - g_os_last_ctx_sw_time; g_os_last_ctx_sw_time = g_os_time; } - /** * os sched get current task * @@ -143,9 +138,7 @@ os_sched(struct os_task *next_t) next_t = os_sched_next_task(); } - if (next_t != g_current_task) { - os_arch_ctx_sw(next_t); - } + os_arch_ctx_sw(next_t); OS_EXIT_CRITICAL(sr); }