Commit Graph

283 Commits

Author SHA1 Message Date
vsonnier
a8f8f4a7e2 Initial commit: working... 2017-08-27 11:11:30 +02:00
vsonnier
c112026a2c Make processing queues timed-push, to be able to escape deadlocks. Rollback 'restart device when blocked' that is ineffective in practice. 2017-08-26 23:34:48 +02:00
vsonnier
e32e687fe8 Make IOThreads terminate() fully non-blocking and misc.
- Thanks to timed-pop() usage, it is no longer needed to nudge queues with dummy to wake them
- Less bad luck to be stuck there
- Misc: leave the trace about the audio thread staturation, useful despite it raises some alarm among users...
2017-08-14 09:46:53 +02:00
vsonnier
c64baab99d Threads vs. Queues lifetimes, cleanups.
- Ideally Queues must outlive the threads using them, but wasn't done so. Yes, std::shared_ptr them!
- Now queues are always valid in the context of the threads using them.
- No longer need tedious queues deallocation by the original owner.
- Misc cleanups.
2017-08-13 19:19:25 +02:00
vsonnier
98c7c30aee Yet another Thread termination problem found, and try killing the app if the closing turns bad 2017-08-13 12:11:14 +02:00
vsonnier
e67a29f5b6 Don't get stuck when closing application just because some Demodulators refuse to die 2017-08-12 11:30:32 +02:00
Dell-Ray Sackett
ab6cb059b9 boolean not a valid keyword
changed boolean to bool in garbageCollect
2017-06-01 21:12:06 -07:00
Dell-Ray Sackett
b315bac97f Change boolean to bool
void DemodulatorMgr::garbageCollect(boolean forcedGC)
should be 
void DemodulatorMgr::garbageCollect(bool forcedGC)
2017-06-01 21:05:49 -07:00
vsonnier
3604b7f1ff Even better thread and application termination:
- Now that timed-pop()/try_pop() prevent indefinite blocking it is best to flush() on thread stopping to unblock push()
- Reworked a bit the CubicSDR::OnExit() sequence, see comments.
2017-06-01 19:57:58 +02:00
vsonnier
8f608bbf5c Cleanup: remove some unused params and variables, conversion warnings seen with #550. 2017-05-29 20:22:10 +02:00
vsonnier
44cdfa8521 Make ReBuffer also GC its own memory + cleanups:
- Use deque in ReBuffer instead of vector (as before) because it allows freeing its memory
- Random cleanup: remove mutable when not needed.
2017-05-25 16:39:01 +02:00
vsonnier
9b0ce69e8f Use the nuclear option to solve the hung problem:
Besides deadlocks, a thread can in theory get stuck in a blocking pop(),
not seeing the stopping flag in particular. So assure liveness by making all
pop() timed pop.
2017-05-25 09:32:27 +02:00
vsonnier
77a82e1617 Another fix for the neverending hung application bugs:
- Clear up DemodulatorInstance garbage collection, only do it in a single thread (AppFrame::OnIdle)
- Add a specific mutex lock for the list of deleted demodulators,
- Add a specific lock to control DemodulatorInstance thread lifetimes, protecting IsTerminated() of concurrent join and delete
2017-05-25 08:03:08 +02:00
vsonnier
4b323e9863 Make ReBuffer refcount management automatic, using std::shared_ptr:
- No longer need to call setRefCount() / decRefCount()
- Restore old ThreadBlockingQueue using std::deque, for std::shared_ptr correct behaviour.
2017-05-24 12:28:37 +02:00
vsonnier
c8cca67fc7 Bookmarks: fix for #525 item 2, other cleanups. 2017-04-01 19:38:08 +02:00
Charles J. Cliffe
f4d090e65b Tweaks for bookmark selection, activation and group renaming 2017-03-30 22:26:11 -04:00
vsonnier
946a9801dc FIX: Inactive demod bendwiths are restored to 0 from sessions, because they were erroneously saved as such.
The problem lies in DemodulatorPreThread:
- settings were actually get/set unprotected from concurrent access (bendwiths, frequencies, sample rates...etc) so make them atomic.
- If bandwith has changed, return the new value instead of the current one, just like frequencies.
2017-02-20 21:39:12 +01:00
vsonnier
051ebec49f BLOCKING_QUEUE: let audio-out try_push() too, else it often blocks evrything while in debugger... 2017-02-18 10:15:47 +01:00
vsonnier
3ed65eff8e BLOCKING_QUEUE: don't forget to cleanup if we try_push() 2017-02-15 20:27:57 +01:00
vsonnier
c7467a88bc BLOCKING_QUEUE: prepare by raising up max queue lenghts
BLOCKING_QUEUE: Replaced ThreadQueue usage by ThreadBlockingQueue usage
BLOCKING_QUEUE: instrument all push() with timeouts, showed some call have to be non-blocking...
BLOCKING_QUEUE: tuned push()/try_push()
2017-02-14 18:42:05 +01:00
vsonnier
4609386648 COMMENTS,POLISHING: comments fenzy around VisualProcessor machinery,
make process() a true interface as strong hint for derived classes,
plus misc define added for understanding.

BUGFIX: FFTDataDistributor loses incoming samples when compacting internal buffers.

BUGFIX2: FFTDistributor: Frozen Waterfall if internal buffer is no bigger than fftSize
2017-02-05 12:41:43 +01:00
vsonnier
89cac5db88 FIX: wrong directive placement prevent building witout HAMLIB 2017-01-03 18:41:38 +01:00
Charles J. Cliffe
5c72b97309 Merge branch 'develop' into master 2017-01-02 21:22:13 -05:00
Charles J. Cliffe
3ec14fbe38 Licence fix, add SPDX-License-Identifier, remove unused code files 2017-01-02 21:07:43 -05:00
Charles J. Cliffe
020cef12c9 Recents list, DataTree rewindAll(), Bookmark view updates 2016-10-05 19:10:01 -04:00
Charles J. Cliffe
560caccbc7 Apply theme to bookmark panel, implement RGBA4f->wxColour operator 2016-09-29 21:57:23 -04:00
Charles J. Cliffe
003758b799 Improve active list integration/interactivity 2016-09-29 20:47:38 -04:00
Charles J. Cliffe
367a723947 Active modem tracking; update only when necessary 2016-09-22 20:40:07 -04:00
Charles J. Cliffe
bf7d67751e Initial bookmark form, move demod data node load/save to demod mgr 2016-09-13 22:59:21 -04:00
Charles J. Cliffe
6ede20c3e8 Prevent solo-squelch focus from interrupting user actions; acts as temporary hold as well 2016-08-16 17:55:40 -04:00
vsonnier
0d50a2b241 SMALL_SQUELCH_CLEANUP: No need to DSP tricks to compute magnitude, sqrt() is free on desktop CPUs 2016-08-13 21:25:54 +02:00
Charles J. Cliffe
6a9e60efa9 Only use audio signal level for AM based modems 2016-08-13 14:50:20 -04:00
Charles J. Cliffe
9f5c674646 Make sure squelch lock is released on de-activate too 2016-08-13 14:18:41 -04:00
Charles J. Cliffe
2bbae7209f Solo squelch break focus lock/tweak 2016-08-12 22:58:33 -04:00
Charles J. Cliffe
6ea2b5b8e8 More squelch tweaks; include I/Q dB and compare to audio for peak 2016-08-12 21:34:34 -04:00
Charles J. Cliffe
606d41bc30 Make audio the signal level instead of I/Q.. Fix attack/decay base to sample time. 2016-08-12 20:31:20 -04:00
Charles J. Cliffe
dedac01709 Moving signal ceil/floor for squelch 2016-08-10 14:02:25 -04:00
vsonnier
11ed2bd20b MODEMARGINFOLIST crash: fixed by removing 'ModemArgInfoList newModemArgs' from AppFrame, actually not needed 2016-07-28 16:46:18 +02:00
Charles J. Cliffe
0f5b891b20 Fix Digital scope 2016-07-24 17:24:29 -04:00
Charles J. Cliffe
0090838070 Make modemFactories function ref vs. instances which carry other dsp kit stuff 2016-07-24 15:25:17 -04:00
vsonnier
21c8a81c32 TH_CLEAN_3.5: push() cleanup side of things, assure SDRThread::readStream() to actually check for full + make ThreadQueue notify even in case on not-successfull push(), make it spam notify_all() everytime 2016-07-08 23:30:15 +02:00
vsonnier
b495b388c9 TH_CLEAN_3: Use of non-blocking try_pop() when possible,
AudioThread concurrent access hardening and simplified,
and misc.
2016-07-05 21:45:42 +02:00
vsonnier
567d84711f THREAD_CLEAN_PART2: Assure correct terminate()/isTerminated(delay)/delete sequence +
Removed the NotifyQueue between DemodulatorInstance participants, actually not needed
since DemodulatorInstance::IsTerminated() is explicitly called on some events for cleanups

DELETE_CLEANUP: properly nullify deleted pointers when needed
2016-07-03 14:22:41 +02:00
vsonnier
52de909cfb THREAD_CLEAN: Clearly distinguish between a request to stop by terminate() from the actual termination isTerminated() 2016-06-28 22:16:34 +02:00
vsonnier
55ca1c465a Basic support is here for user labels, even if DataTree only support 8bit strings
Regenerated fonts with up to 254 characters. Rendering is OK, but DataTree do not able to save it...
2016-06-12 17:05:11 +02:00
vsonnier
00e241a784 LABEL: first attempt, <user_label> is read from session XML, apparently also saved. 2016-06-11 07:46:07 +02:00
vsonnier
4ec08b8b68 MISC 1 : Create ReBuffer by default with refcount 1, so remove redundant refCount(1) evertwhere 2016-06-09 19:38:20 +02:00
Charles J. Cliffe
b54ab38a47 More minor tweaks; getBuffer refcount 1 init suggestion from @vsonnier 2016-06-08 19:48:46 -04:00
Charles J. Cliffe
2bdefca263 Trying.. still one stuck in the queue on delete.. 2016-06-07 21:12:30 -04:00
Charles J. Cliffe
50bfb251f8 Attempt to clean up any buffers that weren't used on terminate, still one hanging around.. 2016-06-07 20:36:59 -04:00