From 31401ab85c6d489d300843283e32e2089072f060 Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Tue, 21 Jun 2022 16:22:34 +0200 Subject: [PATCH] server: better react on brick startup problems --- kernel/mars_server.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/kernel/mars_server.c b/kernel/mars_server.c index 30117200..8e5b73a2 100644 --- a/kernel/mars_server.c +++ b/kernel/mars_server.c @@ -600,6 +600,25 @@ int handler_thread(void *data) (const char *[]){}, 0); if (likely(prev)) { + int max_loop = 10; + int nr_loop = 0; + + /* First check whether the new brick is actually working */ + while (!prev->power.led_on) { + status = mars_power_button(prev, true, false); + if (status >= 0) + break; + brick_msleep((nr_loop / 2) * (1000 / HZ)); + nr_loop++; + if (nr_loop > max_loop) { + MARS_ERR("#%d cannot start '%s', err=%d\n", + sock->s_debug_nr, + path, status); + goto err; + } + cond_resched(); + } + /* All right: we can connect to the new brick */ status = mars_connect((void *)brick->inputs[0], prev->outputs[0]); if (unlikely(status < 0)) { MARS_ERR("#%d cannot connect to '%s'\n", sock->s_debug_nr, path);