Max Kellermann
6200c0dc46
net/StaticSocketAddress: include <string_view> only ifdef HAVE_UN
2024-05-06 12:50:19 +02:00
Max Kellermann
1760310123
Revert "util/IntrusiveList: allow the last disposer to destroy the IntrusiveList"
...
This reverts commit 669cbcd25a
("util/IntrusiveList: allow the last disposer to destroy the
IntrusiveList"). It was bad because it could lead to off-by-one crash
bugs when the last item was removed inside the previous item's
disposer.
We need a different solution for the other crash bug that was fixed by
the reverted commit.
2024-05-06 12:49:30 +02:00
Max Kellermann
56d4784b11
util/IntrusiveList: add API documentation
2024-05-06 12:48:53 +02:00
Max Kellermann
4d3adaa557
event/SocketEvent: erase IMPLICIT_FLAGS in Cancel{Read,Write}()
...
Without this, calling CancelRead() after ScheduleRead() would leave
the HANGUP scheduled, and the caller could receive HANGUP events over
and over which are never properly handled, leading to a busy loop.
The semantics of this API are hard to get right, because the
IMPLICIT_FLAGS (a property of epoll) are somewhat weird. But it seems
that this change repairs a side effect of the SocketEvent interface
that seemed counterintuitive.
2024-05-06 12:48:42 +02:00
Max Kellermann
6830cf9dcf
net/AllocatedSocketAddress: add SetLocal() overload with std::string_view
2024-05-06 12:48:42 +02:00
Max Kellermann
7ebe56fdd9
util/SpanCast: allow ToStringView() only with integral char types
...
This avoids std::string_view specialization that make no sense.
2024-04-16 12:37:08 +02:00
Max Kellermann
fae235197f
util/SpanCast: allow ReferenceAsBytes() only with trivially-copyable
...
Addd the std::has_unique_object_representations_v constraint so we
cast stuff to std::byte only if this would make sense.
2024-04-16 12:33:36 +02:00
Max Kellermann
0c1ecc96a8
*: let libfmt quote strings
2024-04-16 11:50:18 +02:00
Max Kellermann
39c9e92f42
lib/fmt: require libfmt 9
...
Version 9 added the "debug format" which I'd like to use.
2024-04-16 11:50:18 +02:00
Max Kellermann
0d8498f1d1
lib/fmt/SocketAddressFormatter: simpler template syntax
2024-04-16 11:02:36 +02:00
Max Kellermann
7198db758d
lib/fmt/PathFormatter: eliminate AllocatedPath specialization with std::convertible_to<Path>
2024-04-16 11:00:21 +02:00
Max Kellermann
7a4743d00e
config/File: add missing include
2024-04-16 11:00:21 +02:00
Max Kellermann
ae85c2a979
db/Configured: log debug message when there is no cache directory
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1525
2024-04-16 10:57:28 +02:00
Max Kellermann
9c7b930f8f
Merge branch 'alsa-drain-recovery' of https://github.com/borine/MPD
2024-04-15 22:21:53 +02:00
Max Kellermann
57212d5a35
player/Thread: remove unnecessary StartDecoder() call
...
Let Run() do this in the next loop iteration.
2024-04-15 21:49:11 +02:00
Max Kellermann
7236f83999
player/Thread: do not start the decoder twice
...
Upon receiving PlayerCommand::QUEUE, call StartDecoder() only if the
decoder is not already starting. Checking just
DecoderControl::IsIdle() is not enough because the decoder may already
have finished decoding the song before the player has started playing
it and before it had a chance to call CheckDecoderStartup().
Omitting the StartDecoder() call now means it will be started later in
the Run() main loop, after CheckDecoderStartup() has succeeded (which
effectively switches to the song that has already been decoded by the
current decoder).
This fixes an assertion failure when compiled in debug mode
(`-Db_ndebug=false`) and random noise playback in non-debug mode
(`-Db_ndebug=true`).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1900
2024-04-15 21:39:53 +02:00
Max Kellermann
c8ece786dd
player/Thread: add assert() to StartDecoder()
...
StartDecoder() must not be called when a decoder is still being
started. This detects the bug
https://github.com/MusicPlayerDaemon/MPD/issues/1900 earlier.
2024-04-15 21:36:11 +02:00
Max Kellermann
1e4bf90c60
io, net, evnet: quote file names in error messages
2024-04-10 13:36:05 +02:00
Max Kellermann
b3a31b69ee
util/RedBlackTree: fix lost "right" child while swapping with successor
...
Fixes a tree corruption bug that led to assertion failures.
2024-04-10 13:35:31 +02:00
Max Kellermann
88475f2e2b
util/RedBlackTree: swap colors when swapping with successor
...
Swapping was incomplete without swapping the colors; this led to
assertion failures under certain conditions.
2024-04-10 13:35:28 +02:00
Max Kellermann
e0a53d4747
util/IntrusiveTreeSet: add debug method Check()
...
Only for the unit test.
2024-04-10 13:35:21 +02:00
Max Kellermann
669cbcd25a
util/IntrusiveList: allow the last disposer to destroy the IntrusiveList
...
Fixes a use-after-free bug in Co::MultiAwaitable::SetReady() when the
last callback frees the Co::MultiAwaitable owner.
2024-04-10 13:35:09 +02:00
Max Kellermann
2f7c19f139
util/SpanCast: rewrite ToStringView(std::span<std::byte>) to avoid cast ambiguities
2024-04-10 13:34:51 +02:00
Max Kellermann
e131f22642
util/SpanCast: merge two ToStringView() using std::remove_const_t
2024-04-10 13:34:25 +02:00
jcorporation
c613d25f29
Add operators contains and starts_with to sticker find
2024-04-06 20:08:59 +02:00
Max Kellermann
4c56e87e36
lib/curl/Global: remove empty line
2024-04-04 09:18:34 +02:00
Max Kellermann
011b96ff98
net/UniqueSocketDescriptor: add method MoveToFileDescriptor()
2024-04-04 09:16:44 +02:00
Max Kellermann
d563f5fc87
decoder/mpg123: use mpg123_ssize_t only on MPG123_API_VERSION >= 47
2024-04-03 23:21:54 +02:00
Max Kellermann
9c2df5ce19
decoder/mpg123: implement stream_decode
2024-04-03 23:12:26 +02:00
Max Kellermann
1745c485f3
decoder/mpg123: move code to Scan()
2024-04-03 22:52:56 +02:00
Max Kellermann
a53db82ae4
decoder/mpg123: move code to Decode()
2024-04-03 22:49:43 +02:00
Max Kellermann
a20a83eb76
decoder/mpg123: move code to GetAudioFormat()
2024-04-03 22:37:29 +02:00
Max Kellermann
65e5a43e46
decoder/List: prefer "mpg123" over "mad"
...
libmad hasn't been maintained for many many years, while libmpg123 is
still maintained.
Our "mad" plugin can't do streams, but MPD will automatically fall
back to "mad" (or "ffmpeg") for streams.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1954
2024-04-03 22:25:34 +02:00
Max Kellermann
b6afdf1201
util/UriUtil: disable path segment stripping
...
This bug introduced by commit 49ed9dae34
and activated by commit acc1bd6297
caused leading spaces to disappear from the beginning of all file
names.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1961
2024-04-03 22:00:36 +02:00
Max Kellermann
08a00ee21b
config/PartitionConfig: clip the max_playlist_length setting
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1932
2024-04-03 21:43:39 +02:00
Max Kellermann
99da022775
util/IntrusiveSortedList: remove unused class
2024-04-03 21:31:08 +02:00
Max Kellermann
1ee25b4234
event/TimerList: remove option NO_BOOST
...
Always use the new IntrusiveTreeSet class.
2024-04-03 21:30:59 +02:00
Max Kellermann
c5e607a310
event/TimerList: use IntrusiveTreeSet instead of boost::intrusive::multiset
2024-04-03 21:30:31 +02:00
Max Kellermann
5a0bad3b2f
util/IntrusiveTreeSet: new class
2024-04-03 21:29:34 +02:00
Max Kellermann
6a99f20828
util/IntrusiveHashSet: add concept checks to *Operators
...
This requires adding another template argument and reordering the others.
2024-04-03 21:27:37 +02:00
Max Kellermann
91ca502e10
output/httpd/Client: pass std::string_view to HandleLine()
2024-04-03 21:06:11 +02:00
Max Kellermann
1e5c37ee78
util/SpanCast: add ToStringView() with non-const std::byte
...
Without this, we would get std::string_view<std::byte> which makes no
sense.
2024-04-03 20:58:03 +02:00
Max Kellermann
ef2cdc0c6a
output/httpd/Client: remove duplicate API docs
2024-04-03 20:50:31 +02:00
Max Kellermann
c94c08c6b4
event/BufferedSocket: pass std::span to OnSocketInput()
2024-04-03 20:43:40 +02:00
Max Kellermann
5de8edced6
output/httpd/HttpdClient: convert metaint
to a compile-time constant
...
After all these years, we had this as a field but there was never a
way to change the value. So let's just hard-code it until we actually
have a reason to make it variable at runtime.
2024-04-03 20:30:53 +02:00
Max Kellermann
8906ce07de
output/httpd/IcyMetaDataServer: pass metaint as std::size_t
2024-04-03 20:29:47 +02:00
Max Kellermann
9d66fc491c
output/httpd/Client: fix API doc syntax
2024-04-03 20:21:18 +02:00
Max Kellermann
f8a838db5d
output/httpd/Client: convert variable to std::string_view
...
In all cases, we already know the length, and casting the C string to
std::string_view has to call strlen() again.
2024-04-03 20:20:33 +02:00
Max Kellermann
e4ba736d03
input/{async,rewind}, decoder/dsdiff: use std::cmp_*() for safer integer comparisons
2024-03-15 18:45:46 +01:00
Max Kellermann
cc291e8c98
Merge branch 'extend-robustness-of-cdda-playback' of https://github.com/lazypingu/MPD
2024-03-15 18:39:45 +01:00