diff --git a/resources/news.txt b/resources/news.txt index 573dbcc04..f0d5d0f23 100644 --- a/resources/news.txt +++ b/resources/news.txt @@ -24,6 +24,7 @@ IMPROVED: Waterfall span setting is stored in milliseconds. FIXED: Time on waterfall is calculated correctly. FIXED: Frequency is correctly rounded in I/Q filenames. + FIXED: Crash in AFSK1200 decoder. 2.16: Released April 28, 2023 diff --git a/src/dsp/sniffer_f.cpp b/src/dsp/sniffer_f.cpp index 6390f1fb7..fd7550972 100644 --- a/src/dsp/sniffer_f.cpp +++ b/src/dsp/sniffer_f.cpp @@ -43,14 +43,15 @@ sniffer_f::sniffer_f(int buffsize) : gr::sync_block ("sniffer_f", gr::io_signature::make(1, 1, sizeof(float)), gr::io_signature::make(0, 0, 0)), + d_buffsize(buffsize), d_minsamp(1000) { /* allocate circular buffer */ #if GNURADIO_VERSION < 0x031000 - d_writer = gr::make_buffer(buffsize, sizeof(float)); + d_writer = gr::make_buffer(d_buffsize, sizeof(float)); #else - d_writer = gr::make_buffer(buffsize, sizeof(float), 1, 1); + d_writer = gr::make_buffer(d_buffsize, sizeof(float), 1, 1); #endif d_reader = gr::buffer_add_reader(d_writer, 0); @@ -122,7 +123,7 @@ void sniffer_f::get_samples(float * out, unsigned int &num) return; } - num = d_reader->items_available(); + num = std::min(d_reader->items_available(), d_buffsize); memcpy(out, d_reader->read_pointer(), sizeof(float)*num); d_reader->update_read_pointer(num); } diff --git a/src/dsp/sniffer_f.h b/src/dsp/sniffer_f.h index 08c56a72d..a068555ea 100644 --- a/src/dsp/sniffer_f.h +++ b/src/dsp/sniffer_f.h @@ -90,6 +90,7 @@ class sniffer_f : public gr::sync_block std::mutex d_mutex; /*! Used to prevent concurrent access to buffer. */ gr::buffer_sptr d_writer; gr::buffer_reader_sptr d_reader; + int d_buffsize; unsigned int d_minsamp; /*! smallest number of samples we want to return. */ };