<p>Vasil Velichkov has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10731">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Format the output into ostringstream and then write it at once.<br><br>This fixes the garbled output when multiple printers are used in a<br>flowgraph.<br><br>closes #255<br>closes #420<br><br>Change-Id: I1012ed26371b4c67163545652f0a1ce0f576af9e<br>---<br>M lib/misc_utils/bursts_printer_impl.cc<br>M lib/misc_utils/message_printer_impl.cc<br>2 files changed, 21 insertions(+), 16 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/gr-gsm refs/changes/31/10731/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/lib/misc_utils/bursts_printer_impl.cc b/lib/misc_utils/bursts_printer_impl.cc</span><br><span>index c22e60b..ab9c319 100644</span><br><span>--- a/lib/misc_utils/bursts_printer_impl.cc</span><br><span>+++ b/lib/misc_utils/bursts_printer_impl.cc</span><br><span>@@ -66,48 +66,50 @@</span><br><span>             return;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        std::cout << d_prepend_string;</span><br><span style="color: hsl(120, 100%, 40%);">+        std::ostringstream out;</span><br><span style="color: hsl(120, 100%, 40%);">+        out << d_prepend_string;</span><br><span>         if (d_prepend_fnr)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << frame_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+            out << frame_nr;</span><br><span>         }</span><br><span> </span><br><span>         if (d_prepend_fnr && d_prepend_frame_count)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << " ";</span><br><span style="color: hsl(120, 100%, 40%);">+            out << " ";</span><br><span>         }</span><br><span> </span><br><span>         if (d_prepend_frame_count)</span><br><span>         {</span><br><span>             // calculate fn count using libosmogsm</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << osmo_a5_fn_count(frame_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+            out << osmo_a5_fn_count(frame_nr);</span><br><span>         }</span><br><span> </span><br><span>         if (d_prepend_fnr || d_prepend_frame_count)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << ": ";</span><br><span style="color: hsl(120, 100%, 40%);">+            out << ": ";</span><br><span>         }</span><br><span> </span><br><span>         if (d_print_payload_only)</span><br><span>         {</span><br><span>             for (int ii=0; ii<57; ii++)</span><br><span>             {</span><br><span style="color: hsl(0, 100%, 40%);">-                std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 3]);</span><br><span style="color: hsl(120, 100%, 40%);">+                out << std::setprecision(1) << static_cast<int>(burst[ii + 3]);</span><br><span>             }</span><br><span>             for (int ii=0; ii<57; ii++)</span><br><span>             {</span><br><span style="color: hsl(0, 100%, 40%);">-                std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 88]);</span><br><span style="color: hsl(120, 100%, 40%);">+                out << std::setprecision(1) << static_cast<int>(burst[ii + 88]);</span><br><span>             }</span><br><span>         }</span><br><span>         else</span><br><span>         {</span><br><span>             for(int ii=0; ii<burst_len; ii++)</span><br><span>             {</span><br><span style="color: hsl(0, 100%, 40%);">-              std::cout << std::setprecision(1) << static_cast<int>(burst[ii]);</span><br><span style="color: hsl(120, 100%, 40%);">+              out << std::setprecision(1) << static_cast<int>(burst[ii]);</span><br><span>             }</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        std::cout << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+        out << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+        std::cout << out.str() << std::flush;</span><br><span>     }</span><br><span> </span><br><span>     bool bursts_printer_impl::is_dummy_burst(int8_t *burst, size_t burst_len)</span><br><span>diff --git a/lib/misc_utils/message_printer_impl.cc b/lib/misc_utils/message_printer_impl.cc</span><br><span>index e8aa2d3..8342946 100644</span><br><span>--- a/lib/misc_utils/message_printer_impl.cc</span><br><span>+++ b/lib/misc_utils/message_printer_impl.cc</span><br><span>@@ -46,26 +46,27 @@</span><br><span>         gsmtap_hdr * header = (gsmtap_hdr *)message_plus_header;</span><br><span>         uint32_t frame_nr = be32toh(header->frame_number);</span><br><span>         </span><br><span style="color: hsl(0, 100%, 40%);">-        std::cout << d_prepend_string;</span><br><span style="color: hsl(120, 100%, 40%);">+        std::ostringstream out;</span><br><span style="color: hsl(120, 100%, 40%);">+        out << d_prepend_string;</span><br><span>         if (d_prepend_fnr)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << frame_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+            out << frame_nr;</span><br><span>         }</span><br><span> </span><br><span>         if (d_prepend_fnr && d_prepend_frame_count)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << " ";</span><br><span style="color: hsl(120, 100%, 40%);">+            out << " ";</span><br><span>         }</span><br><span> </span><br><span>         if (d_prepend_frame_count)</span><br><span>         {</span><br><span>             // calculate fn count using libosmogsm</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << osmo_a5_fn_count(frame_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+            out << osmo_a5_fn_count(frame_nr);</span><br><span>         }</span><br><span> </span><br><span>         if (d_prepend_fnr || d_prepend_frame_count)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-            std::cout << ": ";</span><br><span style="color: hsl(120, 100%, 40%);">+            out << ": ";</span><br><span>         }</span><br><span>         </span><br><span>         int start_index = sizeof(gsmtap_hdr);</span><br><span>@@ -77,9 +78,11 @@</span><br><span>         </span><br><span>         for(int ii=start_index; ii<message_plus_header_len; ii++)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-            printf(" %02x", message_plus_header[ii]);</span><br><span style="color: hsl(120, 100%, 40%);">+            out<<" "<<(std::hex)<<std::setw(2)<<std::setfill('0')<<(uint32_t)message_plus_header[ii];</span><br><span>         }</span><br><span style="color: hsl(0, 100%, 40%);">-        std::cout << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        out << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+        std::cout << out.str() << std::flush;</span><br><span>     }</span><br><span> </span><br><span>     message_printer::sptr</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10731">change 10731</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/10731"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: gr-gsm </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I1012ed26371b4c67163545652f0a1ce0f576af9e </div>
<div style="display:none"> Gerrit-Change-Number: 10731 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vasil Velichkov <vvvelichkov@gmail.com> </div>