[hamradio-commits] [dump1090] 122/373: VK1ET : Ctrl/C and other cleanup code

Matthew Ernisse mernisse-guest at moszumanska.debian.org
Thu Oct 23 14:58:12 UTC 2014


This is an automated email from the git hooks/post-receive script.

mernisse-guest pushed a commit to branch backport
in repository dump1090.

commit 5f7ed42050c5c3f2dbe8763a472966e483f2ba71
Author: Malcolm Robb <Support at ATTAvionics.com>
Date:   Mon Apr 29 22:14:06 2013 +0100

    VK1ET : Ctrl/C and other cleanup code
    
    Changes supplied by John VK1ET.
    
    This tidies up the thread termination, which then allows for use of [a
    trapped] Ctrl/C to cleanly terminate the program and dump stats if flag
    set.
---
 dump1090.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/dump1090.c b/dump1090.c
index 21b98dc..32607c6 100644
--- a/dump1090.c
+++ b/dump1090.c
@@ -319,6 +319,11 @@ static uint64_t mstime(void) {
     return mst;
 }
 
+void sigintHandler(int dummy) {
+    MODES_NOTUSED(dummy);
+    Modes.exit = 1;      // Signal to threads that we are done
+}
+
 /* =============================== Initialization =========================== */
 
 void modesInitConfig(void) {
@@ -3363,8 +3368,9 @@ void backgroundTasks(void) {
 int main(int argc, char **argv) {
     int j;
 
-    /* Set sane defaults. */
+    // Set sane defaults
     modesInitConfig();
+    signal(SIGINT, sigintHandler); // Define Ctrl/C handler (exit program)
 
     /* Parse the command line options */
     for (j = 1; j < argc; j++) {
@@ -3384,6 +3390,7 @@ int main(int argc, char **argv) {
             Modes.fix_errors = 1;
         } else if (!strcmp(argv[j],"--no-fix")) {
             Modes.fix_errors = 0;
+            Modes.aggressive = 0;
         } else if (!strcmp(argv[j],"--no-crc-check")) {
             Modes.check_crc = 0;
         } else if (!strcmp(argv[j],"--raw")) {
@@ -3414,7 +3421,8 @@ int main(int argc, char **argv) {
         } else if (!strcmp(argv[j],"--metric")) {
             Modes.metric = 1;
         } else if (!strcmp(argv[j],"--aggressive")) {
-            Modes.aggressive++;
+            Modes.aggressive = 1;
+            Modes.fix_errors = 1;
         } else if (!strcmp(argv[j],"--interactive")) {
             Modes.interactive = 1;
         } else if (!strcmp(argv[j],"--interactive-rows")) {
@@ -3465,7 +3473,7 @@ int main(int argc, char **argv) {
         }
     }
 
-    /* Initialization */
+    // Initialization
     modesInit();
     if (Modes.net_only) {
         fprintf(stderr,"Net-only mode, no RTL device or file open.\n");
@@ -3484,6 +3492,7 @@ int main(int argc, char **argv) {
     /* If the user specifies --net-only, just run in order to serve network
      * clients without reading data from the RTL device. */
     while (Modes.net_only) {
+        if (Modes.exit) exit(0); // If we exit net_only nothing further in main()
         backgroundTasks();
         usleep(100000);
     }
@@ -3517,8 +3526,9 @@ int main(int argc, char **argv) {
         if (Modes.exit) break;
     }
 
-    /* If --ifile and --stats were given, print statistics. */
-    if (Modes.stats && Modes.filename) {
+    // If --stats were given, print statistics
+    if (Modes.stats) {
+        printf("\n\n");
         printf("%d ModeA/C detected\n",                         Modes.stat_ModeAC);
         printf("%d valid preambles\n",                          Modes.stat_valid_preamble);
         printf("%d DF-?? fields corrected for length\n",        Modes.stat_DF_Len_Corrected);
@@ -3533,6 +3543,7 @@ int main(int argc, char **argv) {
         printf("%d total usable messages\n",                    Modes.stat_goodcrc + Modes.stat_fixed);
     }
 
+    rtlsdr_cancel_async(Modes.dev);  // Cancel rtlsdr_read_async will cause data input thread to terminate cleanly
     rtlsdr_close(Modes.dev);
-    return 0;
+    exit (0);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/dump1090.git



More information about the pkg-hamradio-commits mailing list