aboutsummaryrefslogtreecommitdiff
path: root/src/modules/mavlink/mavlink.c
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2013-09-08 20:05:38 +0200
committerLorenz Meier <lm@inf.ethz.ch>2013-09-08 20:05:38 +0200
commitc3bb6960e6f85d07d65fefdfebfdc0650e81aa92 (patch)
tree105912b892a8955aaeb3e8fd6623ff45f6fbcea4 /src/modules/mavlink/mavlink.c
parent56a35cc8896b077e70226541a43aa0d449e8d9bb (diff)
downloadpx4-firmware-c3bb6960e6f85d07d65fefdfebfdc0650e81aa92.tar.gz
px4-firmware-c3bb6960e6f85d07d65fefdfebfdc0650e81aa92.tar.bz2
px4-firmware-c3bb6960e6f85d07d65fefdfebfdc0650e81aa92.zip
Fixed mavlink start / stop to ensure process is in a sane state once NSH return
Diffstat (limited to 'src/modules/mavlink/mavlink.c')
-rw-r--r--src/modules/mavlink/mavlink.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/modules/mavlink/mavlink.c b/src/modules/mavlink/mavlink.c
index 5eb7cba9b..cbcd4adfb 100644
--- a/src/modules/mavlink/mavlink.c
+++ b/src/modules/mavlink/mavlink.c
@@ -743,7 +743,7 @@ int mavlink_thread_main(int argc, char *argv[])
thread_running = false;
- exit(0);
+ return 0;
}
static void
@@ -767,7 +767,7 @@ int mavlink_main(int argc, char *argv[])
/* this is not an error */
if (thread_running)
- errx(0, "mavlink already running\n");
+ errx(0, "mavlink already running");
thread_should_exit = false;
mavlink_task = task_spawn_cmd("mavlink",
@@ -776,15 +776,25 @@ int mavlink_main(int argc, char *argv[])
2048,
mavlink_thread_main,
(const char **)argv);
+
+ while (!thread_running) {
+ usleep(200);
+ }
+
exit(0);
}
if (!strcmp(argv[1], "stop")) {
+
+ /* this is not an error */
+ if (!thread_running)
+ errx(0, "mavlink already stopped");
+
thread_should_exit = true;
while (thread_running) {
usleep(200000);
- printf(".");
+ warnx(".");
}
warnx("terminated.");