In my gnuradio test application I’m attempting to pass a JSON formatted
string from my C++ custom block, to my python flow graph containing the
block.



The String message are being received by my python flow graph, but there’s
a memory leak. Over time, my flowgraph RSS (memory footprint) grows at
about 32k/s up until the application runs out of memory.



The leak didn’t start until after I retrofitted my flowgraph and custom
block with polymorphic type (PMT) based message passing. I’m passing a 200
or so byte JSON string (as a symbol) from C++ block to python flow graph
about 60 times per second.



Sleuthing through the pmt.cc code [1] I see the String (symbol) objects are
stored in a hash. I suspect what is happening is that since all of my JSON
strings are unique, they’re getting added to the hash and causing the hash
to grow unbounded over time.



>From what I can tell by reading the wiki [2], the approach I’m using is the
best way to get a string from my custom block and into my python flowgraph.



[1]
https://github.com/gnuradio/gnuradio/blob/master/gnuradio-runtime/lib/pmt/pmt.cc

[2] https://www.gnuradio.org/doc/doxygen/page_pmt.html





Sample c++ block code snippet from my work function:



// Calculate metrics. Occasionally (60/second) we'll get back a JSON
formatted string of metrics.

crossingData = calculateWaveCrossingMetrics(lastSampleValue,in[i]);



if (crossingData.length() > 0) {

  pmt::pmt_t messageString;

  messageString = pmt::string_to_symbol(crossingData.c_str());

  message_port_pub(polymorphicMessageDestination, messageString);





Questions:



1.     Is this the best way to get a string from my C++ block into my
python application?

2.     Is there a way to pass my messages that doesn’t result in memory
growing unbounded?





Thank you

Brad
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to