Max Kellermann
031ccce8b7
input/curl: convert struct to class
2018-01-11 12:31:29 +01:00
Max Kellermann
1f50bdb230
event/Loop: use std::atomic_bool for the "quit" variable
...
Fixes thread sanitizer warnings.
2018-01-08 10:06:23 +01:00
Max Kellermann
2eef4e6716
thread/Thread: add debug attribute "inside_handle"
...
This attribute shall be used only for IsInside() to make this safe
against a race condition described in #188 :
> There is no requirement on the implementation that the ID of the
> created thread be available before the newly created thread starts
> executing.
http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html ):
This means that on some pthread implementations (e.g. Haiku), the
assert(thread.IsInside()) could fail.
Closes #188
2018-01-08 09:58:18 +01:00
Max Kellermann
d989dbfec4
thread/Thread: make IsInside() debug-only
...
This method is only used inside assert().
2018-01-08 09:56:39 +01:00
Max Kellermann
ca9fcec364
thread/Thread: fix indent
2018-01-08 09:49:08 +01:00
Max Kellermann
354104f9a9
thread/{Thread,Id}: use defaul-initialized pthread_t as "undefined" value
...
Use the "==" operator instead of pthread_equal().
This allows us to eliminate two boolean flags which are there to avoid
race conditions, and made the thing so fragile that I got tons of
(correct) thread sanitizer warnings.
2018-01-07 17:20:26 +01:00
Max Kellermann
8649ea3d6f
thread/Thread: use BoundMethod
2018-01-07 17:20:26 +01:00
Max Kellermann
752ff12c37
thread/Thread: move code to Run()
2018-01-07 17:20:26 +01:00
Max Kellermann
4bb89b1755
MusicPipe: lock the mutex in Peek() and GetSize()
2018-01-07 17:20:22 +01:00
Max Kellermann
be068f360d
Merge remote-tracking branches 'mmuman/configure-sockaddr-sin-len' and 'mmuman/haiku-build-fix'
2018-01-06 13:19:58 +01:00
François Revol
5b18b66282
Haiku: fix build
...
Convert the fill_buffer to a class method, to allow accessing the private method.
Also remove the leftover Wrapper stuff.
2018-01-05 23:10:58 +01:00
François Revol
7b2283c28b
configure.ac: autodetect sin_len member in struct sockaddr_in.
...
This fixes a build issue on Haiku as it does have sin_len.
Tested on Linux as well.
For some reason AC_CHECK_MEMBER doesn't generate the proper define
in config.h.in, so I used AC_CHECK_MEMBERS.
2018-01-05 22:20:47 +01:00
Max Kellermann
c74e018359
Merge branch 'v0.20.x'
2018-01-05 18:11:04 +01:00
Max Kellermann
cab77e35e0
queue/PlaylistControl: fix crash after seek failure
...
This completes the bug fix commit
2065e3290452377b2931f3129b230c8cc536cbc8; if we clear "queued" then we
must clear "queued_song" as well, or another variant of the assertion
fails.
2018-01-05 13:00:24 +01:00
Max Kellermann
4a120f8090
Merge branch 'v0.20.x'
2018-01-05 10:10:17 +01:00
Max Kellermann
c2cbb7b8ce
output/haiku: remove unimplemented Cancel() method
2018-01-05 10:05:14 +01:00
Max Kellermann
79b0f97a3f
output/Interface: clarify Play() API documentation
2018-01-05 08:35:40 +01:00
Max Kellermann
329f9cd9fe
thread/Util: no ioprio_set() on Android due to seccomp/SIGSYS
2018-01-04 19:33:14 +01:00
Max Kellermann
e3ef3e8d71
output/Control: unlock mutex during expensive operations
2018-01-04 10:36:18 +01:00
Max Kellermann
7574dfd339
output/Control: move code from FinishDestroy() to destructor
2018-01-04 10:34:27 +01:00
Max Kellermann
a5b93008f5
output/Filtered: remove redundant nullptr assignments from Setup()
2018-01-04 10:32:10 +01:00
Max Kellermann
0227af5bb7
output/Filtered: remove BeginDestroy()
...
All it does is "sometimes" close the mixer, but that is also done in
the destructor.
2018-01-04 10:29:27 +01:00
Max Kellermann
ef71df60f6
output/Multiple: use std::unique_ptr<FilteredAudioOutput>
2018-01-04 10:14:26 +01:00
Max Kellermann
f52b3b4e04
output/Multiple: dispose the AudioOutputControl instances
...
Fixes shutdown memory leak.
2018-01-04 10:11:23 +01:00
Max Kellermann
7e4e32cfe0
output/Filtered: eliminate FinishDestroy()
...
This is implicitly done by the destructor.
2018-01-04 10:05:31 +01:00
Max Kellermann
9f8649884b
output/Control: dispose the FilteredAudioOutput
...
Fixes shutdown memory leak.
2018-01-04 10:01:34 +01:00
Max Kellermann
f1ee4caddd
output/Init: fix configuration option name in error message
2018-01-04 09:57:28 +01:00
Max Kellermann
051b8fbb31
output/Thread: add "noexcept"
2018-01-04 09:54:35 +01:00
Max Kellermann
b0ea32f660
output/Control: remove unused method StopThread()
2018-01-04 09:20:22 +01:00
Max Kellermann
8322ae5a4c
output/Control: use class ScopeUnlock()
2018-01-04 08:41:19 +01:00
Max Kellermann
98a7c62d7a
player/Thread: don't send silence if decoder is slow
...
The output plugin shall decide whether to insert silence or do nothing
at all. The ALSA output plugin has already implemented this.
Inserting silence is not necessary or helpful for some plugins, and
may even hurt them (e.g. "recorder").
2018-01-03 17:36:41 +01:00
Max Kellermann
859e59262e
player/Thread: remove unnecessary "continue" keywords
2018-01-03 17:17:22 +01:00
Max Kellermann
ec113420f1
player/Thread: hold mutex while calling SongBorder()
...
Eliminates unnecessary mutex locks.
2018-01-03 17:12:21 +01:00
Max Kellermann
1954e94de2
Merge branch 'work_tag' of git://github.com/loujine/MPD
...
Closes #181
2018-01-03 11:47:02 +01:00
Max Kellermann
f6ec43b9ec
pcm/Resampler: add virtual method Flush()
...
Wired to Filter::Flush().
Closes #153
2018-01-02 23:17:25 +01:00
Max Kellermann
6d0d8cf9cf
filter/Filter: add virtual method Flush()
...
This will be used by filters which have internal buffers which need to
be flushed at the end, e.g. the "soxr" resampler.
2018-01-02 23:15:51 +01:00
Max Kellermann
5ede02aed8
filter/FilterConfig: rename to LoadChain.cxx
2018-01-02 23:09:36 +01:00
Max Kellermann
bbabb7a14c
filter/Plugin: move filter_configured_new() to LoadOne.cxx
2018-01-02 23:06:53 +01:00
Max Kellermann
b13ebe3ddb
filter/Plugin: eliminate filter_new()
2018-01-02 23:00:16 +01:00
Max Kellermann
17b0add058
filter/Observer: pass Reset() to underlying Filter
...
Wohooooo, the method Filter::Reset() has been broken because no
implementation of it has ever been called for a loooong time.
And nobody ever noticed it. WTF.
2018-01-02 22:13:14 +01:00
Max Kellermann
c68ed40661
pcm/SoxrResampler: implement method Reset()
2018-01-02 21:53:09 +01:00
Max Kellermann
b0199245d5
output/Thread: move code to method InternalDrain()
2018-01-02 18:03:48 +01:00
Max Kellermann
b93e3b2cf6
output/Thread: move code to method InternalCloseError()
2018-01-02 18:02:14 +01:00
Max Kellermann
ae7fcf4c6b
output/Thread: move common code to method Failure()
2018-01-02 18:00:20 +01:00
Max Kellermann
1607754771
output/Thread: update "last_error" after filter/play errors
2018-01-02 17:59:37 +01:00
Max Kellermann
028f659c40
output/Thread: move error handling code into the catch block
2018-01-02 17:48:14 +01:00
Max Kellermann
8dfdacf128
output/Thread: AudioOutput::Play() must not return zero
2018-01-02 17:47:46 +01:00
Max Kellermann
f4a56f839f
output/haiku: remove size==0 check from Play()
...
By API contract, this parameter must not be zero.
2018-01-02 17:45:14 +01:00
Max Kellermann
67a8eedca0
output/ao: round write_size down to a multiple of the frame size
2018-01-02 17:33:33 +01:00
Max Kellermann
be65c7d5d0
config/Block: add method GetPositiveValue()
...
Adds missing checks to several plugins.
2018-01-02 17:24:34 +01:00