Commit Graph
165 Commits
Author SHA1 Message Date
Robin Getz 953391c171 repo wide : Name SDRangel-owned threads for debugging
Assign descriptive names to SDRangel threads so thread activity can be
identified when investigating multi-threaded behavior, including crashes,
leaks, and synchronization issues in debuggers and others tools.

Use compact names to fit platform thread-name limits (14 chars) while
retaining the component and thread role where possible.

Signed-off-by: Robin Getz <rgetz503@gmail.com>
2026-09-26 20:26:27 -04:00
Edouard Griffiths 62ce6c7b88 Merge pull request #2955 from rgetz/rgetz-fix-message-queue-leaks
tree wide: Fix message ownership and reporting for unhandled queue messages
2026-09-27 00:56:58 +02:00
Robin Getz c2b30d4fa8 tree wide: Fix message ownership and reporting for unhandled queue messages
MessageQueue::pop() transfers ownership of the popped message to the
caller, but many handleInputMessages() implementations only deleted
the message when handleMessage() returned true. When a message was not
handled, ownership had already been transferred from the queue and the
message was leaked.

This was identified while investigating an ASAN leak in the audio
subsystem.

Update the applicable handleInputMessages() implementations to always
delete messages after handleMessage() returns. Unhandled messages are
also logged with the component and message identifier so unexpected
message routing is visible during debugging.

This change:
- Ensures every message popped from a queue has its ownership resolved.
- Prevents leaks when handleMessage() returns false.
- Makes unhandled messages visible instead of silently discarding them.
- Preserves the existing message handling logic and does not require
  components to handle message types that are legitimately irrelevant
  to them.

The changes are intentionally mechanical and limited to the common
message queue ownership and diagnostic pattern.

Signed-off-by: Robin Getz <rgetz503@gmail.com>
2026-09-25 23:49:05 -04:00
Jon Beniston a0918b5785 Map API names to setting names.
Fix API settings with spelling mistakes.
2026-09-13 12:09:20 +01:00
Jon BenistonandClaude Opus 5 d7bc4a94e4 TestSource: period and duty cycle for the P1 and P2 patterns
The sawtooth and square patterns had a fixed 1000 sample pulse width. Both
now take a period, and the square pattern a duty cycle, from the GUI, a
preset or the web API, with the period shown in seconds beside the sample
count.

A period of zero divides by zero in the sawtooth and wraps the unsigned
sample counter in the square pattern, giving a cycle of four billion
samples, so it is refused at every entrance: a minimum of one on the spin
box, a clamp when an older or hand edited preset is read, a clamp on the
web API, and a clamp in the worker for anything that reaches it another
way. The duty cycle is held to 0 to 100 the same way.

Also fixes the worker's timer. It is now parented to the worker so that it
moves to the worker thread with it, and it runs between startWork and
stopWork rather than from construction. TestSourceInput::stop() runs in
another thread, and Qt will not stop a timer from one, so the stop is
asked of the worker and waited for. The m_running flag it replaces is
gone, along with the test of it in every tick.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 19:42:07 +01:00
Jon BenistonandClaude Opus 5 ddedd59568 Add MessageDialog and use it in place of the QMessageBox static functions
QMessageBox::information() and friends build the box on the stack, parent
it to the calling widget and run a nested event loop in exec(). If the
parent is closed while the box is open, which the Web API can do at any
time, the parent deletes the box and its children and the heap is
corrupted.

MessageDialog offers the same calls, but the box is heap allocated, given
Qt::WA_DeleteOnClose and shown rather than exec'd, so nothing runs a
nested event loop and the box owns its own lifetime. A box with the same
text as one already up is raised instead of a second being created.

The trade off is that information(), warning() and critical() return
immediately and cannot report which button was pressed. question() takes
a callback for the cases that need the answer.

Converts the call sites in the device, channel and feature GUIs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 17:16:49 +01:00
f4exb ef4357f26b Release 7.25.0 2026-05-04 06:00:17 +02:00
Tammo Jan Dijkema c86c178363 Use Qt6.2 compatible qt_add_plugin in CMake 2026-04-25 17:11:41 +02:00
f4exb c8389506e4 Release v7.23.1 2026-02-02 21:38:25 +01:00
f4exb 63348eeee1 Make device title editable in the basic device settings. Fixes #2292 2026-01-28 03:05:39 +01:00
Jon Beniston bffe587c18 Replace NCOF with NCO as the latter has better SFDR. 2026-01-25 11:11:20 +00:00
f4exb b935db0228 Publish version 7.22.9 2025-09-28 21:27:43 +02:00
Jon Beniston f204c168f6 Add crash handler on Windows.
Add memory buffer to Logger, so last 500 log messages can be included in crash report.
Generate and include stripped pdb files so stack trace can include function names.
2025-07-31 16:35:44 +01:00
f4exb 8f2ac70621 Updated plugin versions 2024-10-06 10:53:38 +02:00
Edouard Griffiths f522d88fc5 Merge pull request #2252 from srcejon/freq_scanner
Update CMakeLists.txt to allow static libraries to be built
2024-09-13 21:07:04 +02:00
srcejon 1df07b21ae Update CMakeLists.txt to allow static libraries to be built, as well as shared.
Add BUILD_BENCH, BUILD_SHARED_LIBS, ENABLE_AARONIARTSA and ENABLE_METIS options.
2024-09-11 20:16:40 +01:00
DreamNik 202fc96de6 Append prefix to plugin name when running on Android.
Android libraries can't be placed inside subdirectory, so to
distinguish plugins from regular libraries the new prefix is used.
2024-09-05 13:37:51 +03:00
f4exb 585d806ef8 All device plugins: make sure start and stop are effective once only. PArt of #2159 2024-08-27 09:54:09 +02:00
f4exb 3e909d2016 Updated versions and changelogs 2024-06-25 22:19:14 +02:00
Daniele Forsi d8c733cab7 Update properties related to fonts
Automatically updated by opening the .ui file in Qt Creator.
2024-06-23 17:32:49 +02:00
Simon Ruderich 3307000a72 plugins: fix non-matching <hx> tags in readme.md 2024-04-26 08:37:24 +02:00
Daniele Forsi 570c1f6877 Remove unused includes and use more direct includes 2024-04-20 19:10:18 +02:00
Mykola Dvornik 15337cac66 Fix bug that prevents settings changes updates via reverse API
Most plugins that use reverse API to PATCH settings updates to remote
server only do so when `useReverseAPI` is toggled, but not when the
relevant settings are being updated. So lets fix the precondition to
use the `m_useReverseAPI` flag instead.
2024-04-14 18:58:12 +02:00
f4exb cdae5ca048 Updated versions and changelogs 2024-04-14 11:41:00 +02:00
Daniele Forsi 8c3f7e3775 Remove unused includes and use more direct includes 2024-04-11 23:31:34 +02:00
f4exb 07e8ae0de1 Updated changelogs and plugins versions 2023-11-29 05:00:58 +01:00
f4exb b6c4d10b62 Rewriting of copyright notices for plugins/samplesource. Part of #1893 2023-11-18 10:07:41 +01:00
Jon Beniston e799e5eb72 Fix resize cursor not being cleared when mouse moves over child widgets 2023-11-13 20:51:03 +00:00
Daniele Forsi c6195634f9 Fix repeated words
Found with:
grep -r " \([[:alpha:]]\+\) \1 " --color=yes --include=*.md
2023-05-04 21:42:49 +02:00
Jon Beniston 32a2d202fd Set timer to be precise before calling start, otherwise it is ignored on Windows 2023-03-08 16:35:30 +00:00
f4exb 5b169a3978 Updated versions and changelogs 2023-02-23 01:02:36 +01:00
f4exb 46db55f1db Removed unncecessary call to updateChannels in VORLocalizer and DemodAnalyzer. Fixes #1572 2023-02-03 02:13:54 +01:00
Jon Beniston 0dd466a900 Add DialogPositioner to ensure dialogs are fully on screen and remain on
screen when screen orientation changes.
Add DialPopup to allow dials to adjusted with a slider, which is easier
on touchscreens.
Add TableTapAndHold to support table context menus on touchscreens.
2022-12-20 10:31:15 +00:00
Jon Beniston fc7c9c1fc8 Update CMakeLists.txt to support both Qt5 and Qt6. Add option ENABLE_QT6 2022-11-17 14:34:54 +00:00
Jon Beniston ee8b8ade88 Device GUIs: Constain window size via minimumSize/maximumSize, rather than handling resizeEvent. Add maximum button. Hide size buttons when window size is fixed 2022-11-09 15:53:44 +00:00
f4exb 3814a95073 Updated versions and changelogs 2022-11-01 23:51:06 +01:00
f4exb 922cfc695e Test source: Make settings assignments atomic. Part of #1329 2022-10-29 21:55:52 +02:00
f4exb f034319c22 Updated versions and changelogs 2022-10-19 17:40:14 +02:00
f4exb 949a9e9380 Center frequency dials up to 9 digits and transverter delta frequency dial up to 12 digits. Fixes #1476 2022-10-15 03:04:29 +02:00
f4exb c6496b11f9 TestSource: new threading model. Part of #1346 2022-10-08 23:50:12 +02:00
f4exb 1c75f8d326 TestSource: moved thread start and quit/wait to start and stop methods respectively 2022-10-08 23:29:42 +02:00
Jon Beniston d6a02f659a Device GUIs: Stop timers in destructors. 2022-10-05 15:40:09 +01:00
Jiří Pinkava 0df2d75e6d Replace deprecated QMutex(Recursive) with QRecursiveMutex 2022-09-17 23:00:07 +02:00
f4exb de94ea01b5 Updated main and plugin versions 2022-05-14 13:16:33 +02:00
f4exb 9e5c629473 v7: API: added workspace handling for device, spectrum, feature and channel. Implements #1242 2022-05-13 22:24:48 +02:00
f4exb 520106c7ba Massive UI revamping (v7): fixed devices .ui files to correct display wwhen creating device. Part of #1209 2022-04-27 02:06:17 +02:00
Jon Beniston 00b72891dd Adjust some plugin window constraints so they work better with stack layout 2022-04-26 18:20:23 +01:00
f4exb 218237c466 Massive UI revamping (v7): Devices: set the border on the outer side of the window. Part of #1213 2022-04-24 02:13:18 +02:00
f4exb 90d331675a Massive UI revamping (v7): fixed widget size handling: sample sources. Part ofs #1209 2022-04-21 07:53:36 +02:00
f4exb 249db03cf3 Massive UI revamping (v7): fixed device workspace index save/restore and removed useless geometry blobs. Fixes #1207 2022-04-20 20:08:41 +02:00