13
0
Commit Graph

1618 Commits

Author SHA1 Message Date
26b5700957 filearchive: extend API 2022-09-07 17:03:08 -06:00
2a7d528c5d
Update and consolidate gettext.h
This fixes compilation with --no-nls on modern systems
2022-09-07 00:09:54 +02:00
25d1209bb4
Only dump SessionEvent pool in debug builds
This ensures that the user will see a "POOL OUT OF MEMORY" message.
In rare case dumping the pool can segfault when printing the Event,
The pool is zero initialized and only ever contains events, so
in theory it is safe to print them..
2022-07-07 22:34:11 +02:00
9e11ef4f39
MixerScene: handle edge-case with midi-cc/bender controllables 2022-07-07 16:06:08 +02:00
effc209070
Place Pool in PBD namespace
A public class named "Pool" in the global namespace just
calls for symbol name conflicts.
2022-07-07 05:21:54 +02:00
8418e7c954
NO-OP: clang-format 2022-07-07 05:21:49 +02:00
1694c71cd5
Implement memory-pool debug-dump
This will allow to trace "POOL OUT OF MEMORY" and see
which events fill up the event/memory pool.
2022-07-07 05:21:31 +02:00
0d70be3a05 miscellaneous fixes for warnings from -Wconversion 2022-07-04 22:01:48 -06:00
9ab32d7cb4
Fix builds on platforms without execinfo (amend cd4549aff7) 2022-06-23 01:59:58 +02:00
0004ca2c41 add useful DEBUG_RESULT and DEBUG_RESULT_CAST to pbd/debug.h 2022-06-22 13:31:08 -06:00
d917d7b351 fix actual x_assert macro definition 2022-06-22 13:31:08 -06:00
df641765ec add new header for x_assert() macro 2022-06-22 13:31:08 -06:00
24f1a65d5f use C style cast in C code, rather than C++ constructor 2022-06-22 13:31:08 -06:00
48a109e8c8 fix snprintf buffer size warning 2022-06-22 13:31:08 -06:00
cd4549aff7 fix signed/unsigned warning 2022-06-21 17:31:50 -06:00
dc4235efbe fix left-shift of negative value warning 2022-06-21 17:31:17 -06:00
32b41037b5 libpbd: do not use debug transmitter inside BaseUI::signal_new_request() to avoid recursion 2022-06-13 13:43:31 -06:00
20997dfa78 add new exception-safe RAII object, that increments/decrements its argument 2022-06-13 10:51:04 -06:00
95aa39d1c4
Update call_slot() API, inform caller if slot cannot be queued
It can happen that ::get_request() returns NULL if the
EventPool is full. In that case the slot is never called.

In this case the caller can now take action.
2022-06-09 01:46:27 +02:00
87ee609339
Amend previous commit, fix debug print format 2022-06-03 05:32:19 +02:00
fd5d290217
Fix mach thread time constraints on M1
or any system where timebase is not 1 tick per ns.
2022-06-03 05:27:42 +02:00
c2cff575b7
Add debug info to track down M1 time-constraint issue 2022-06-03 03:52:43 +02:00
60db5a827f
Use SYS_futex instead of __NR_futex
Use the C library definition for portability; also test
for support instead of unconditionally enabling it.
2022-05-30 21:56:49 +02:00
12e5042ece libpbd: add muldiv() to compute v * (n/d) without overflow 2022-05-27 12:47:44 -06:00
e1f5fb0206 libpbd: change GlibEventLoopCallback to use C API not C++
We discovered in the past that the C++ API for GSource/Glib::Source has some fatal and unfixable flaws. Copy similar
code and just use the C API for GSource instead
2022-05-19 22:24:43 -06:00
a811583380
Add API to query registered controllers 2022-05-19 20:08:08 +02:00
4c1506e50e add copyright notices 2022-05-16 15:41:56 -06:00
968533cc23 (re)add mechanism for a callback in any glib event loop executed before the loop "executes"
This is based on code from earlier commits that were later reversed, but we need some mechanism
to ensure that threads have a thread local tempo map ptr set. The big difference is that this
time we do not implement this for all instances of an AbstractUI - implementation is left to
each thread/event loop
2022-05-16 15:24:52 -06:00
itmuckel
9178ca635a
Remove unused imports and modernize stateful.cc 2022-05-13 23:07:49 +02:00
40fa6e2023
Improve PBD::Semaphore performance
Skip syscall if no threads are waiting and decouple atomic
value from futex address so that FUTEX_WAIT does not fail.
2022-05-12 05:27:27 +02:00
f849f3ce2c
Use futex semaphores on Linux only 2022-05-12 00:56:33 +02:00
5ca76789c5
Allow to query capacity of MPMC queue
This is in preparation to grow the queue as needed.
2022-05-12 00:40:31 +02:00
34678c094a
Implement Futex semaphore 2022-05-11 23:55:41 +02:00
f7e917c123
Potential fix for M1 x-thread events
On M1, the cross-thread channel sets G_IO_PRI in addition to G_IO_IN
this breaks various assumptions in receivers, which test for ~G_IO_IN
as error condition.
2022-05-02 00:02:33 +02:00
3d860b9665 libpbd: do not use DEBUG transmitter from inside AbstractUI<T> request methods
This will lead to recursion, since delivering the debug msg goes through a request method.

Discovered by running with -D all
2022-04-26 22:04:08 -06:00
9ce91e2952
NO-OP: clang-format 2022-04-23 23:12:13 +02:00
c1d6c0690e
Fix poll() edge case on macOS, clean up logic
Return from poll_for_request() when CrossThreadChannel is
closed/destroyed. -- see also f4166fb61d

This also cleans up poll API usage, and check for nonnegative
return value is added.
2022-04-23 23:12:10 +02:00
defc902571
Allow to use Destructible as virtual base class
This is in preparation for a pure-virtual base class for
PluginInsert to expose `DropReferences` in the virtual base.

```
class PlugInsertBase : virtual public PBD::Destructible
class PluginInsert : public Processor, public PlugInsertBase
class Processor : public SessionObject
class SessionObject : public PBD::StatefulDestructible
```
2022-04-14 16:35:02 +02:00
luz paz
fb55878375
Fix source typos (heirarchy->hierarchy) 2022-04-08 21:38:00 +02:00
7bf89ce109 Constification: make Stateful::get_state() const, with all other required const-ness added (libs) 2022-04-06 21:56:59 -06:00
e15fb0dc38
Fix unset of LIBRARY_PATH environment variable
see also 82d491cb80
2022-04-01 20:50:28 +02:00
82d491cb80
Allow to unset LD_LIBRARY_PATH on exec
This is useful when using distro-packaged video-tools
(e.g. on Linux/ARM), or when running post-export commands.
2022-04-01 18:19:55 +02:00
abbf1ca698
Allow to get exit status from child processes 2022-03-11 18:18:06 +01:00
84c51a1411
Fix BaseUI x-thread signal vs thread-start race
Control surfaces c'tor usually subscribe to signals e.g.
PortConnectedOrDisconnected. This happens after the parent BaseUI
is created, but before set_active() -> BaseUI::run() is called.

At this point in time there is no run_loop thread.

There are two options to handle AbstractUI::call_slot():

 A. Queue the event in the event-loop, using the thread-local
    request buffer of the caller. Then hope the BaseUI
    thread is started, and calls ::handle_ui_requests() before
    the memory pool runs out of space.

 B. Handle the event in the calling thread. -- This may not be
    rt-safe and may call functions with locks held by the caller.
    It will however not accumulate events.

This takes approach (B). If _run_loop_thread is NULL, directly
handle the signal.

In the past, prior to 50abcc74b5, approach (A) was taken.
NULL never matched Glib::Threads::Thread::self().

This also reverts a prior attempt (e417495505) to address this issue.
2022-03-02 21:19:12 +01:00
e417495505
Fix possible race (BaseUI creation vs x-thread signal-emission)
When a BaseUI is being created, signals can arrive before the
_run_loop_thread is running, which can trigger an assert in
BaseUI::caller_is_self().
2022-03-01 17:19:20 +01:00
50abcc74b5
Replace Glib::Threads with PBD::Thread (2/2) 2022-03-01 01:34:35 +01:00
e515e73db6
Implement a replacement for Glib::Threads::Thread
This is mainly because Glib::Threads (g_system_thread_new)
uses pthread on Un*x, but on Windows relies on GThreadWin32
(HANDLE)_beginthreadex

This later causes issues e.g. in BaseUI::run()

```
unhandled exception (type Glib::Error) in signal handler:
domain: g_thread_error
code  : 0
what  : Error setting new thread priority: The parameter is incorrect.
```
2022-03-01 01:33:08 +01:00
baf2323798 add PBD::PropertyChange::dump (std::ostream&) to make it easier to see what changed 2022-02-09 10:08:01 -07:00
c17fbd5abc
Fix poor_mans_glob, ~' for $HOME' is only valid at the start of a path 2022-02-01 15:47:54 +01:00
f7b826841b
Log Thread-name in stacktrace 2022-01-26 00:17:49 +01:00
Mads Kiilerich
8bb91099c5 wscript: drop configure statements already present in the top level wscript
Avoid repeated pointless configure messages like:
Checking for 'g++' (C++ compiler!)                   : /usr/lib64/ccache/g++
Checking for 'gcc' (C compiler)                      : /usr/lib64/ccache/gcc
2022-01-22 22:19:03 +01:00
beb0a96f42
API to directly retrieve XML child content 2022-01-13 00:09:55 +01:00
30539716ca
Fix various Wcast-qual
g_atomic_int_get() requires a non-const pointer, however
many APIs are declared virtual const, so const_cast<> is
preferred over an API change.
2022-01-10 00:06:20 +01:00
1f5649ef28
Fix vfork edge-case
Calling c_str() after vfork is prohibited after a successful vfork.
Also the string needs to remain in scope until exec() completed.
2021-12-31 01:39:39 +01:00
b2f0d31630
Cont'd work on concurrent Signal, Connection destruction
see also 992c727959
and 7580d6aba7

Spin to prevent race between d'tor setting `in_dtor`
and acquiring Signal::_mutex.
2021-11-21 04:12:24 +01:00
992c727959
Cont'd work on concurrent Signal, Connection destruction
See also 7580d6aba7
2021-11-21 03:27:50 +01:00
7580d6aba7
Fix race condition when ~Signal and ~ScopedConnection run concurrently
Previously a deadlock was possible:

Thread 1:
  ~ScopedConnection ()
  -> Connection::disconnect ()
     takes Connection::_mutex             <<<< 1
  -> _signal->disconnect (shared_from_this ())
  -> Signal::disconnect ()
     takes Signal::_mutex                 <<<< 2

Thread 2:
 ~Signal ()
     takes Signal::_mutex                 <<<< 2
  -> Connection::signal_going_away ()
     takes Connection::_mutex             <<<< 1
2021-11-20 23:14:59 +01:00
9e763c2672 remove all dangling event-loop-precall code 2021-10-11 17:48:53 -06:00
a2a36de98f
Fix minor memory leak when querying Windows registry 2021-10-11 18:20:07 +02:00
ba2a2cb654
Implement natural-sort spaceship operator 2021-10-08 04:12:32 +02:00
64db1367bb Change name of Stateful::apply_changes (PropertyBase) to the singular form.
Makes it slightly easier to read+parse what is happening. Yes, for a
Sequence property, the call could apply several changes, but overwhelmingly
it is used to apply a single change.
2021-09-25 16:49:51 -06:00
2ed1bdd243 Remove PropertyTemplate::call() and replace with code that uses ::set()
This makes undo/redo work correctly.
2021-09-25 16:49:51 -06:00
5a1201f05b
Fix duplicate libs 2021-09-19 23:39:51 +02:00
cb81b06a5d
Revert "Fix div/zero, allow switching backends"
This reverts commit 1288262ca7.
2021-09-15 17:52:53 +02:00
1288262ca7
Fix div/zero, allow switching backends
When switching backends, the effective sample-rate is zero.
This only affects the butler thread (the only active thread when
stopped). The actual issue here is the butler calling
"non-realtime-stop" without a backend. However fixing 0/0
generally seems appropriate.
```
#0 in int_div_round<long>(long, long) (x=0, y=0) at ../libs/pbd/pbd/integer_division.h:36
#1 in Temporal::samples_to_superclock(int64_t, int) (samples=0, sr=0) at ../libs/temporal/temporal/superclock.h:39
#2 in Temporal::timepos_t::timepos_t(long) (this=0x7f94bc0a5890, s=0) at ../libs/temporal/temporal/timeline.h:55
#3 in ARDOUR::Automatable::non_realtime_locate(long) (this=0x55a12a980cc8, now=0) at ../libs/ardour/automatable.cc:421
#4 in ARDOUR::Route::non_realtime_locate(long) (this=0x55a12a980ae0, pos=0) at ../libs/ardour/route.cc:5462
#5 in ARDOUR::Session::non_realtime_stop(bool, int, bool&) (this=0x55a12e0cd000, abort=false, on_entry=1, finished=@0x7f94bc0a5e0f: true) at ../libs/ardour/session_transport.cc:1487
#6 in ARDOUR::Session::butler_transport_work(bool) (this=0x55a12e0cd000, have_process_lock=false) at ../libs/ardour/session_transport.cc:1153
#7 in ARDOUR::Butler::thread_work() (this=0x55a12f3b7000) at ../libs/ardour/butler.cc:222
#8 in ARDOUR::Butler::_thread_work(void*) (arg=0x55a12f3b7000) at ../libs/ardour/butler.cc:16
```
2021-09-11 04:54:40 +02:00
e057088195 remove unused, empty glib event source/callback code (was from an experiment during nutempo2 development) 2021-09-04 07:39:27 -06:00
John Emmas
dda7612479 A few visibility changes needed for linking to libpbd (when building with MSVC) 2021-09-04 12:35:44 +01:00
b4b4745bd4
Amend 55211b8d (PRNG seed, use local address) 2021-08-16 04:59:10 +02:00
baf5a13f17
Update atomic/volatile compat
With glib 2.64, volatile gint produce annoying Wcast-qual
compiler warnings with mingw/gcc-8.

Even though the the build succeeds, and only glib 2.68+
requires non-volatile atomics this results in a much
cleaner build-log.
2021-08-16 04:26:55 +02:00
a3b28b4114
Move PCG RNG implementation out of header, update API 2021-08-15 16:03:01 +02:00
79baf356b9
Add realtime safe random number generator 2021-08-14 01:03:37 +02:00
b42727b92a temporal: fix use of std::abs on 64 bit value 2021-08-13 12:51:34 -06:00
25ecc54208 possible minor optimizations of atomic loads in int62_t class 2021-08-13 12:51:34 -06:00
b96a2b1757 libpbd: provide a way to abort an RCU-based write_copy()->update() sequence 2021-08-13 12:51:32 -06:00
170541deb7 libpbd: fix implementation of int62_t::operator== and ::operator!=
Reversed logic error
2021-08-13 12:51:31 -06:00
bed76798f3 manual fixups after rebase against master (general libs edition) 2021-08-13 12:51:31 -06:00
4f6befea83 fix in62_t equality/inequality operators when used with mismatched arguments 2021-08-13 12:51:30 -06:00
b7d22508fa Add blib event callback to BaseUI, with a virtual method to be overridden by derived classes. 2021-08-13 12:51:30 -06:00
179f2b2624 change value of int62_t::max to avoid flag bit being set 2021-08-13 12:51:30 -06:00
8dbbc1df54 library changes to get libtemporal setup at application startup 2021-08-13 12:51:30 -06:00
27c98adda9 alter API for MementoCommandBinder to allow future flexibility 2021-08-13 12:51:30 -06:00
09c84d1de8 add new GSource-derived object that can be attached to a Glib::MainContext to execute code before other sources have their dispatch() method invoked 2021-08-13 12:51:29 -06:00
b2a4fe1b50 likely temporary change to visibility inside PBD::int62.h 2021-08-13 12:51:29 -06:00
111f10638d gcc 6.x requires <typeinfo> for typeid, it seems 2021-08-13 12:51:29 -06:00
0534d1fbb2 more improvements for int62_h based on rgareus' review 2021-08-13 12:51:28 -06:00
b7b4c99bc9 Temporal: add new arithmetic operators allowing more inter-operability of int64_t/int62_t; make operator int64_t explicit to avoid hidden use 2021-08-13 12:51:28 -06:00
788cd5456e add additional methods allowing direct arithmetic operator expressions to be used with PBD::Property 2021-08-13 12:51:28 -06:00
709df7a08f add operators for self-typed arithmetic 2021-08-13 12:51:28 -06:00
cb78984c63 add new int62.h header, which implements a generic 62bit-int-plus-flagbit type 2021-08-13 12:51:28 -06:00
c043156089 new header with an efficient implementation of integer division-rounding-to-nearest 2021-08-13 12:51:28 -06:00
8a41931ff4
Print note when stacktrace is too short 2021-07-23 01:43:18 +02:00
c5e5659022
Fix crash when demangled symbol is n/a
std::string foo (NULL) can throw a std::__throw_logic_error
which was not caught.
2021-07-19 18:26:22 +02:00
John Emmas
12e1c960b6 Add an extra dependency lib which was previously only needed for Debug builds 2021-07-15 09:30:08 +01:00
c92dfed706
Fix windows builds (stacktrace pthread debug) 2021-07-14 16:04:07 +02:00
46251c2068
Fix Windows debug builds 2021-07-14 15:07:26 +02:00
4651ec8382
Unconditionally enable stacktrace for windows builds
This also fixes an issue introduced 7d39205350
(duplicate variable name "levels".
2021-07-13 13:47:26 +02:00
7d39205350
Allow to skip top stacktrace frames
This is useful to hide the call of `PBD::stacktrace` itself.
2021-07-12 04:01:07 +02:00
a74b4e8ef0
No more wine 2021-07-03 19:07:25 +02:00
bf43c8d2d4
Set thread names 2021-06-30 17:15:27 +02:00
775f46315f remove debugging output from timing.h 2021-06-29 17:46:03 -06:00
a36ab0c562 avoid timing stats calculation with <= values from get_microseconds() 2021-06-29 11:13:59 -06:00
a9f285b82b debugging timing stats by showing how max values are computed 2021-06-29 09:46:46 -06:00
24ea6c4d30 make it possible to debug one of the RAII TimingStats objects 2021-06-29 09:25:38 -06:00
b20a541d7e change PBD::microseconds_t to a signed type and check for -1 in TimingStats::update
This may help a Windows issue with the return value of QueryPerformanceCounter
2021-06-28 14:47:48 -06:00
John Emmas
09589c3c94 Add/remove source(s) in our MSVC project (libpbd) 2021-06-28 10:37:54 +01:00
4fd639eca9 NOOP: remove incomplete comment 2021-06-27 12:48:29 -06:00
a261d399e0 microsoft docs say that only windows.h is required for QueryPerformance* 2021-06-27 12:17:51 -06:00
e2f2d0cb0f fix inadvertent typo that would cause compilation failure on windows 2021-06-27 10:53:31 -06:00
857a9b14d7 more macOS cleanup for microseconds.cc 2021-06-27 10:39:51 -06:00
347ca5c2fe clean up locally-created mess in libs/pbd/microseconds.cc 2021-06-27 10:28:53 -06:00
412b6a922d macOS: slight speed up for ::get_microseconds()
Move timebase initialization into microsecond_timer_init() and drop conditional
2021-06-27 10:23:44 -06:00
db0691d236 macOS: fix compilation warnings on macOS versions where clock_gettime() is finally implemented 2021-06-27 08:24:59 -06:00
738b0ad21b
Fix OSX builds (amend 04df26244, a2b5962b6) 2021-06-27 05:09:07 +02:00
b904fdea5d switch PBD::Timing* to use PBD::get_microseconds() 2021-06-26 20:15:12 -06:00
2678366555 window compilation fix 2021-06-26 18:53:28 -06:00
228231d914 window compilation fix 2021-06-26 18:47:08 -06:00
5c8df87205 window compilation fix 2021-06-26 18:43:17 -06:00
5289d44821 window compilation fix 2021-06-26 18:40:44 -06:00
d1967827ca compilation error fix for windows 2021-06-26 18:35:14 -06:00
b9a85c7dcd compilation error fix for windows 2021-06-26 18:34:46 -06:00
4c1dcb70bb compilation error fix for windows 2021-06-26 18:33:27 -06:00
a2b5962b6c add new files for PBD::get_microseconds() 2021-06-26 18:30:11 -06:00
9e598548f7 put get_microseconds() into PBD namsepace
This implementation is a blend of the two previously in libs/ardour/globals.cc
and libs/pbd/window_timer_utils.cc
2021-06-26 18:25:02 -06:00
995137aeb3 add PBD::WaitTimerRAII with reverse semantics from PBD::TimerRAII 2021-06-26 11:24:59 -06:00
1e5ccd4acc
Use poll timeout workaround on macOS only
Other systems implement proper poll according
to POSIX and return when the pipe is closed.
2021-06-21 03:48:04 +02:00
f4166fb61d Fix endless poll on macOS #8753
Harvid daemonizes and does not write anything
to stdout/err. as opposed to select(), poll() on
macOS does not return when the child process
terminates or is killed.

However poll() on an invalid FD does throw an
error and POLLNVAL is set.
2021-06-21 01:58:40 +02:00
95f8a3aace
Explicitly prevent unsigned int wrap-around
This is a NOOP (0 - 1) + 2 == (0 + 2) - 1 but avoids
a unsigned int wrap-wrap around for good measure.
2021-06-14 00:43:08 +02:00
a89ad7a265 add queue-reset method to PBD::TimingStats 2021-06-13 10:28:51 -06:00
7980ea4d27 add a method to SerializedRCUManager to release the lock when no update is required 2021-06-13 07:58:45 -06:00
182801b8d7 complete manual reversion of 7bce9899c0 2021-06-11 20:56:33 -06:00
1b505ddcb1 Revert "modify PBD::TimingStats to discard the first 1000 recorded values to avoid too much influence from chaotic startup conditions"
This reverts commit 7bce9899c0.

1000 at 8192 samples @ 44.1 is > 3 mins; counter may have overflowed. Not a necessary change.
2021-06-11 18:55:25 -06:00
462352102c add a new update() method to PBD::TimingStats to allow use of an already-computed interval 2021-06-11 18:55:24 -06:00
ef72afb963 add PBD::TimerRAII class for easy management of TimingStats in scope contexts with multiple return points 2021-06-11 13:09:52 -06:00
7bce9899c0 modify PBD::TimingStats to discard the first 1000 recorded values to avoid too much influence from chaotic startup conditions 2021-06-11 13:09:52 -06:00
7ce43739e8
Tweak sched priorities use given and 4 levels below. 2021-06-10 14:38:45 +02:00
6e82f3669f
Correctly set ctrl-surface thread priority 2021-06-10 03:17:55 +02:00
89a0040f1b
Allow to override rt priority for internal backends 2021-06-10 03:17:53 +02:00
0e570d15ae
Amend 3a7ea6b, do not kill child after 10 sec w/o output
This fixes video-timeline issues (harvid has no output), as well
as ALSA device reservation and xjadeo (when idle).
2021-06-08 23:23:31 +02:00
bed992d55f
Minimize false sharing of MPMC queue variables 2021-06-07 23:40:29 +02:00
5cec55da2e
Micro-optimization: std::atomic<> vs glib
glib atomic operations include a complete act as a full
compiler and (where appropriate) hardware memory barrier.

std::atomic<> allows dedicated acquire and release barrier
semantics which are not available with glib.
2021-06-07 20:44:29 +02:00
1eb6b82b9f
Prevent L1 cache line evicion in MPMC queue
This reduces cache coherence overhead of the queue
2021-06-07 16:05:42 +02:00
1a1e67f595 Use Posix style return values for sem wait when on windows.
0 on success, -1 on error
2021-05-27 15:17:15 -05:00
be6d0fa95c Do not use named semaphores on Windows since they are system wide
https://docs.microsoft.com/en-us/dotnet/standard/threading/semaphore-and-semaphoreslim#named-semaphores

Running multiple instances of Ardour or Ardour/Mixbus would fail in very
odd ways since they would signal each other. Unnamed sems are
correct for this use case.
2021-05-27 15:13:40 -05:00
28619fe71b
Fix window process thread priorities
While POSIX defines a single contiguous range of numbers that
determine a thread's priority. Win32 defines priority classes
and priority levels relative to these classes.

pthread maps those to -15 .. +15 with the top six ones
corresponding to REALTIME_PRIORITY_CLASS and max being
THREAD_PRIORITY_TIME_CRITICAL

Note that the PA backend can USE_MMCSS_THREAD_PRIORITIES
and PBD::MMCSS::set_thread_characteristics() directly for
the I/O threads.
2021-05-14 01:59:20 +02:00
John Emmas
952416c596 Accommodate some changes to 'ssize_t' in VS2019
In more recent versions of MSVC, ssize_t equates to 'long' (for a 32-bit build) or '__int64' (for 64-bit)
2021-05-11 14:06:25 +01:00
98f5224d4c
Fix incorrect port lists due to custom sort
Previously the following were treated as equal
 "MIDI_foo" == "MIDI bar"
So std::map<> PortManager::_ports and PortEngineSharedImpl:_ports
could only have either. This resulted in missing ports
and missing calls to existing ports in cycle_start().

This mainly affected MIDI tracks with imported files, since there
is "MIDI Clock in", and imported files result in tracks
"MIDI_file-name".

This issue was introduced in 6.6-200-g60ff3ef764
2021-05-07 04:24:32 +02:00
ade679f162 move <poll.h> inside an appropriate #ifdef, since it does not exist on Windows 2021-05-06 14:45:56 -06:00
3a7ea6b217 use poll(2) rather than select(2) for reading output from an exec'ed process
select(2) can only handle file descriptors up to 1024, and there are fairly easy to reproduce
cases where the file descriptor used here is larger than that.
2021-05-06 14:41:28 -06:00
fc54ab48ec
Remove unused function, fix optimized builds 2021-05-06 15:27:26 +02:00
John Emmas
a222292e68 Emulate exp2f() for older MS compilers where it wasn't available 2021-05-05 17:50:41 +01:00