[hamradio-commits] [gnss-sdr] 89/303: Improve queue management gnss-sdr and in TTFF tests.

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Mon Feb 13 22:35:51 UTC 2017


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

carles_fernandez-guest pushed a commit to branch master
in repository gnss-sdr.

commit 08f0a3607549eadc09778e9c421ac75ea3771f9d
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date:   Mon Oct 3 17:43:06 2016 +0200

    Improve queue management gnss-sdr and in TTFF tests.
    
    Always destroy queues when exiting
---
 .../PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc       |  4 +-
 .../PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc        |  4 +-
 .../PVT/gnuradio_blocks/hybrid_pvt_cc.cc           |  4 +-
 src/core/receiver/control_thread.cc                |  6 +--
 src/core/receiver/control_thread.h                 |  2 +-
 src/tests/system-tests/ttff_gps_l1.cc              | 57 ++++++++++++----------
 6 files changed, 43 insertions(+), 34 deletions(-)

diff --git a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
index 0b17a2b..32f5433 100644
--- a/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
+++ b/src/algorithms/PVT/gnuradio_blocks/galileo_e1_pvt_cc.cc
@@ -213,7 +213,9 @@ galileo_e1_pvt_cc::galileo_e1_pvt_cc(unsigned int nchannels, bool dump, std::str
 
 
 galileo_e1_pvt_cc::~galileo_e1_pvt_cc()
-{}
+{
+    msgctl(sysv_msqid, IPC_RMID, NULL);
+}
 
 
 
diff --git a/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc
index 8119fe9..d73c6de 100644
--- a/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc
+++ b/src/algorithms/PVT/gnuradio_blocks/gps_l1_ca_pvt_cc.cc
@@ -313,7 +313,9 @@ gps_l1_ca_pvt_cc::gps_l1_ca_pvt_cc(unsigned int nchannels,
 
 
 gps_l1_ca_pvt_cc::~gps_l1_ca_pvt_cc()
-{}
+{
+    msgctl(sysv_msqid, IPC_RMID, NULL);
+}
 
 
 bool pseudoranges_pairCompare_min(const std::pair<int,Gnss_Synchro>& a, const std::pair<int,Gnss_Synchro>& b)
diff --git a/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.cc b/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.cc
index 9f4aabe..6e87576 100644
--- a/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.cc
+++ b/src/algorithms/PVT/gnuradio_blocks/hybrid_pvt_cc.cc
@@ -290,7 +290,9 @@ hybrid_pvt_cc::hybrid_pvt_cc(unsigned int nchannels, bool dump, std::string dump
 
 
 hybrid_pvt_cc::~hybrid_pvt_cc()
-{}
+{
+    msgctl(sysv_msqid, IPC_RMID, NULL);
+}
 
 
 
diff --git a/src/core/receiver/control_thread.cc b/src/core/receiver/control_thread.cc
index a0fe84d..b6c976f 100644
--- a/src/core/receiver/control_thread.cc
+++ b/src/core/receiver/control_thread.cc
@@ -90,6 +90,7 @@ ControlThread::~ControlThread()
 {
     // save navigation data to files
    // if (save_assistance_to_XML() == true) {}
+   if(msgiq != -1) msgctl(msqid, IPC_RMID, NULL);;
 }
 
 
@@ -431,6 +432,7 @@ void ControlThread::init()
     supl_mns = 0;
     supl_lac = 0;
     supl_ci = 0;
+    msqid = -1;
 }
 
 
@@ -528,7 +530,7 @@ void ControlThread::sysv_queue_listener()
     ttff_msgbuf msg;
     double ttff_msg = 0.0;
     int msgrcv_size = sizeof(msg.ttff);
-    int msqid;
+
     key_t key = 1102;
 
     if((msqid = msgget(key, 0644 | IPC_CREAT )) == -1)
@@ -552,9 +554,7 @@ void ControlThread::sysv_queue_listener()
                             read_queue = false;
                         }
                 }
-            usleep(1000000);
         }
-    msgctl(msqid, IPC_RMID, NULL);
 }
 
 
diff --git a/src/core/receiver/control_thread.h b/src/core/receiver/control_thread.h
index b44a818..1580695 100644
--- a/src/core/receiver/control_thread.h
+++ b/src/core/receiver/control_thread.h
@@ -143,7 +143,6 @@ private:
      */
     void assist_GNSS();
     
-    
     void apply_action(unsigned int what);
     std::shared_ptr<GNSSFlowgraph> flowgraph_;
     std::shared_ptr<ConfigurationInterface> configuration_;
@@ -160,6 +159,7 @@ private:
     
     void keyboard_listener();
     void sysv_queue_listener();
+    int msqid;
 
     // default filename for assistance data
     const std::string eph_default_xml_filename = "./gps_ephemeris.xml";
diff --git a/src/tests/system-tests/ttff_gps_l1.cc b/src/tests/system-tests/ttff_gps_l1.cc
index 50ce455..949f670 100644
--- a/src/tests/system-tests/ttff_gps_l1.cc
+++ b/src/tests/system-tests/ttff_gps_l1.cc
@@ -255,26 +255,30 @@ void receive_msg()
     int msqid_stop = -1;
     key_t key = 1101;
     key_t key_stop = 1102;
-    // wait for the queue to be created
-    if((msqid = msgget(key, 0644)) == -1){}
+    bool leave = false;
 
-    if (msgrcv(msqid, &msg, msgrcv_size, 1, 0) != -1)
+    while(!leave)
         {
-            ttff_msg = msg.ttff;
-            if( (ttff_msg != 0) && (ttff_msg != -1))
-                {
-                    TTFF_v.push_back(ttff_msg / (1000.0 / decimation_factor) );
-                    LOG(INFO) << "Valid Time-To-First-Fix: " << ttff_msg / (1000.0 / decimation_factor ) << "[s]";
-                    // Stop the receiver
-                    //while(((msqid_stop = msgget(key_stop, 0644 | IPC_CREAT))) == -1){}
-                    while(((msqid_stop = msgget(key_stop, 0644))) == -1){}
-                    double msgsend_size = sizeof(msg_stop.ttff);
-                    msgsnd(msqid_stop, &msg_stop, msgsend_size, IPC_NOWAIT);
-                }
+            // wait for the queue to be created
+            while((msqid = msgget(key, 0644)) == -1){}
 
-            if(ttff_msg != -1)
+            if (msgrcv(msqid, &msg, msgrcv_size, 1, 0) != -1)
                 {
-                    receive_msg();
+                    ttff_msg = msg.ttff;
+                    if( (ttff_msg != 0) && (ttff_msg != -1))
+                        {
+                            TTFF_v.push_back(ttff_msg / (1000.0 / decimation_factor) );
+                            LOG(INFO) << "Valid Time-To-First-Fix: " << ttff_msg / (1000.0 / decimation_factor ) << "[s]";
+                            // Stop the receiver
+                            while(((msqid_stop = msgget(key_stop, 0644))) == -1){}
+                            double msgsend_size = sizeof(msg_stop.ttff);
+                            msgsnd(msqid_stop, &msg_stop, msgsend_size, IPC_NOWAIT);
+                        }
+
+                    if(ttff_msg == -1)
+                        {
+                            leave = true;
+                        }
                 }
         }
     return;
@@ -586,17 +590,6 @@ int main(int argc, char **argv)
     google::ParseCommandLineFlags(&argc, &argv, true);
     google::InitGoogleLogging(argv[0]);
 
-    // Create SysV message queue to read TFFF measurements
-    key_t sysv_msg_key;
-    int sysv_msqid;
-    sysv_msg_key = 1101;
-    int msgflg = IPC_CREAT | 0666;
-    if ((sysv_msqid = msgget(sysv_msg_key, msgflg )) == -1)
-    {
-        std::cout<<"GNSS-SDR can not create message queues!" << std::endl;
-        throw new std::exception();
-    }
-
     // Start queue thread
     std::thread receive_msg_thread(receive_msg);
 
@@ -611,6 +604,15 @@ int main(int argc, char **argv)
     }
 
     // Terminate the queue thread
+    key_t sysv_msg_key;
+    int sysv_msqid;
+    sysv_msg_key = 1101;
+    int msgflg = IPC_CREAT | 0666;
+    if ((sysv_msqid = msgget(sysv_msg_key, msgflg )) == -1)
+    {
+        std::cout<<"GNSS-SDR can not create message queues!" << std::endl;
+        throw new std::exception();
+    }
     ttff_msgbuf msg;
     msg.mtype = 1;
     msg.ttff = -1;
@@ -619,6 +621,7 @@ int main(int argc, char **argv)
     msgsnd(sysv_msqid, &msg, msgsend_size, IPC_NOWAIT);
     receive_msg_thread.join();
     msgctl(sysv_msqid, IPC_RMID, NULL);
+
     google::ShutDownCommandLineFlags();
     return res;
 }

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



More information about the pkg-hamradio-commits mailing list