Max Kellermann
906e82f600
event/Loop: fix assertion failure due to wrong "busy" value
...
If an InjectEvent callback schedules a timer, the loop will restart,
but the "busy" flag is still false. The fix is to move the "again"
check before the "busy" setting.
2021-01-12 17:28:42 +01:00
Max Kellermann
13f8a912e3
event/Loop: simplify wake_event initializer
2021-01-11 20:14:20 +01:00
Max Kellermann
51f110a990
system/EventPipe: use class Unique{Socket,File}Descriptor
2021-01-11 17:51:22 +01:00
Max Kellermann
17eae74c1c
system/EventFD: Get() returns FileDescriptor
2021-01-11 17:38:30 +01:00
Max Kellermann
cd4b673b6c
event/WakeFD: convert macro to class with a GetSocket() method
2021-01-11 17:02:54 +01:00
Max Kellermann
abbd980671
Merge branch 'v0.22.x'
2021-01-01 19:59:15 +01:00
Max Kellermann
5348f8c9c8
copyright year 2021
2021-01-01 19:54:28 +01:00
arcnmx
0a81e462db
event/SocketEvent: remove FD before closing socket
...
SocketEvent knows the FD is still open and is about to close it, so
it's unnecessary to rely on the kernel (via AbandonFD) to clean up the
epoll_wait list.
### Why this is relevant
- `AbandonFD` assumes that upon closing the socket, the FD will be automatically removed from the epoll list. That fd is associated with a reference to the `SocketEvent`, so this is an important and dangerous assumption to get wrong. In the case that the FD isn't immediately removed from the list by the kernel, the event loop can crash due to the `SocketEvent` being destroyed and it being a use-after-free bug at that point.
- If a socket FD happens to be duplicated, then closing the SocketEvent FD will not automatically remove it from epoll, and will trigger said bug/crash. It is only automatically removed when all FD references to the underlying socket/resource are closed?
- A `fork()` is one example where a socket FD can be duplicated and result in this situation.
- `CLOEXEC` might be considered mitigation for this but also introduces a race condition where the crash can occur between a `fork()` and `exec()` without additional synchronization to freeze the event loop.
One could argue the mpd event loop isn't fork-safe, and thus should be allowed to use `AbandonFD` however it likes. A decision on whether this is intended should probably be declared; but either way this fix seems appropriate in cases where `Abandon` isn't actually necessary. It also might be possible to fix `AbandonFD` to mark the `SocketEvent` as removed without using `EPOLL_CTL_DEL`?
[edit: made this dependent on HAVE_THREADED_EVENT_LOOP which is always
true for MPD, but not for ncmpc, for example - mk]
2020-12-04 10:32:46 +01:00
Max Kellermann
5cbbe8ae2e
event/TimerEvent: update API documentation
2020-12-04 09:57:19 +01:00
Max Kellermann
00fafa16c7
event/SocketEvent: remove assert(), reduce header dependencies
2020-12-04 09:56:28 +01:00
Max Kellermann
cea8db7eaa
event/SocketEvent: add comment
2020-12-04 09:55:08 +01:00
Max Kellermann
b56c0e69e4
event/SocketEvent: add another assert() to Open()
2020-12-04 09:24:02 +01:00
Max Kellermann
b27e82e4a9
event/SocketEvent: allow Schedule() with IMPLICIT_FLAGS
...
Relax the API (instead of tightening it further like commit
7bc1c9925b
tried to do unsuccessfully).
2020-12-04 09:17:45 +01:00
Max Kellermann
ad48834469
Revert "event/SocketEvent: add assert()"
...
This reverts commit 7bc1c9925b
. It
caused a crash with the ALSA plugin family (through
MultiSocketMonitor::ReplaceSocketList() and
MultiSocketMonitor::AddSocket()). Until we have a proper fix, the
assertion patch is reverted.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1020
2020-12-02 20:43:29 +01:00
Max Kellermann
9d6b5e2ba1
event/TimerEvent: rename IsActive() to IsPending()
2020-12-02 15:41:11 +01:00
Max Kellermann
33ba190bec
event/TimerEvent: add ScheduleEarlier()
2020-12-02 15:30:37 +01:00
Max Kellermann
3783350d25
event/SocketEvent: document Dispatch()
2020-12-02 15:24:23 +01:00
Max Kellermann
173405a343
event/SocketEvent: make Dispatch() private
2020-12-02 15:14:51 +01:00
Max Kellermann
7bc1c9925b
event/SocketEvent: add assert()
2020-12-02 15:12:30 +01:00
Max Kellermann
4e88f95f94
event/Loop: move the "again" check out of the mutex scope
2020-12-01 20:29:21 +01:00
Max Kellermann
790e540c19
event/Loop: use ClockCache
2020-12-01 20:25:42 +01:00
Max Kellermann
2a1dd55b11
event/Loop: include cleanup
2020-12-01 20:19:40 +01:00
Max Kellermann
be20f760ab
event/Loop: disallow copying
2020-12-01 20:18:33 +01:00
Max Kellermann
8050394003
event/Loop: add `noexcept`
2020-12-01 20:10:53 +01:00
Max Kellermann
ff8b5bc61b
event/Loop: reorder methods
2020-12-01 20:09:25 +01:00
Max Kellermann
ef8797821f
event/Loop: inline field initializers
2020-12-01 20:07:35 +01:00
Max Kellermann
5f2797e7cc
event/Loop: add more assertions to dtor
2020-12-01 20:05:54 +01:00
Max Kellermann
e286702f4c
event/Loop: rename AddDeferred() to AddDefer()
2020-12-01 17:26:39 +01:00
Max Kellermann
c58aaf545f
event/IdleEvent: make a special case of DeferEvent
2020-12-01 17:14:24 +01:00
Max Kellermann
990f2dc1cf
event/DeferEvent: use class IntrusiveList instead of boost::intrusive::list
2020-12-01 17:14:24 +01:00
Max Kellermann
774b4313f2
event/DeferEvent: split the thread-safe version into new class InjectEvent
2020-12-01 17:14:24 +01:00
Max Kellermann
1ecbc2ff0f
event/DeferEvent: explicitly forbid copying
2020-12-01 17:14:24 +01:00
Max Kellermann
fd8e38f8cd
event/DeferEvent: use `using` instead of `typedef`
2020-12-01 17:14:24 +01:00
Max Kellermann
3d276d50b4
event/PollBackend: use vector::push_back() instead of resize()
2020-10-30 16:35:20 +01:00
Max Kellermann
b1b731340e
event/PollBackend: add Item constructor
2020-10-30 16:32:45 +01:00
Max Kellermann
b9b02b4ff2
event/PollBackend: use unordered_map::find() instead of operator[]
...
The latter creates a new object, but we know that the key already
exists.
2020-10-30 16:25:41 +01:00
Max Kellermann
ab5d23da11
event/PollBackend: use unordered_map::emplace() in Add()
2020-10-30 16:24:32 +01:00
Max Kellermann
0554fe3652
event/PollBackend: use std::size_t
2020-10-30 16:09:29 +01:00
Max Kellermann
b0282fe36f
event/PollGroupWinSelect: add Item constructor
2020-10-30 16:07:23 +01:00
Max Kellermann
69b45e693b
event/WinSelect: use unordered_map::find() instead of operator[]
...
The latter creates a new object, but we know that the key already
exists.
2020-10-30 16:05:25 +01:00
Max Kellermann
9e97acc28d
event/WinSelect: merge duplicate code into ApplyReady()
2020-10-30 15:55:23 +01:00
Max Kellermann
b1e446a931
event/WinSelect: add missing `const` to deleted copy ctor/operator
2020-10-30 15:45:29 +01:00
Max Kellermann
938319cd44
event/WinSelect: reorder method prototypes
2020-10-30 15:45:12 +01:00
Max Kellermann
fee29001fa
event/WinSelect: use unordered_map::emplace() in Add()
...
This allow using erase() with iterator, without a key lookup.
2020-10-30 15:32:11 +01:00
Max Kellermann
6d894a1806
event/WinSelect: use SOCKET as std::unordered_map key
2020-10-30 15:25:09 +01:00
Rosen Penev
0fd2c74a66
use structured binding declarations
...
Shorter.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-10-28 15:41:31 -07:00
Max Kellermann
7c47fe746c
event/Loop: AbandonFD() unlinks the SocketEvent
...
Fixes use-after-free bugs causing assertion failures at shutdown,
because all "abandoned" SocketEvents are still in the linked list.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/986
Closes https://github.com/MusicPlayerDaemon/MPD/issues/987
2020-10-28 15:01:32 +01:00
Max Kellermann
65a1c4a016
event/Loop: pass SocketEvent& to AbandonFD()
2020-10-28 14:59:28 +01:00
Max Kellermann
46418d0f2d
event/ServerSocket: remove obsolete API documentation
2020-10-28 14:52:31 +01:00
Max Kellermann
8348a1ec8f
event/PollGroup: rename to PollBackend
2020-10-19 14:52:59 +02:00
Max Kellermann
c18e00daa4
event/PollGroup: move event flags to a separate header
...
Reduce header dependencies for SocketEvent.hxx.
2020-10-19 14:48:41 +02:00
Max Kellermann
418ba96334
event/SocketEvent: forbid copying
2020-10-18 20:07:49 +02:00
Max Kellermann
a60e782959
event/Loop: reorder assertions
2020-10-18 20:05:22 +02:00
Max Kellermann
8bab5733d7
event/Loop: add assertions
2020-10-18 20:04:16 +02:00
Max Kellermann
e3270dfd68
event/SocketEvent: use class IntrusiveList<>
2020-10-18 20:02:47 +02:00
Max Kellermann
a14997ffb8
event/Loop: manage all SocketEvents in a linked list
...
Not only those which are "ready".
2020-10-18 20:01:38 +02:00
Max Kellermann
dd94f97572
event/Loop: un-inline AddFD(), ModifyFD()
...
Prepare for adding more code here.
2020-10-18 19:58:42 +02:00
Max Kellermann
7d502fb448
event/Loop: round epoll_wait() timeout up
...
This implements proper rounding, amending commit dcbb9fe07c
2020-10-18 19:58:42 +02:00
Max Kellermann
f64799622d
event/IdleEvent: use class IntrusiveList<>
2020-10-18 19:28:12 +02:00
Max Kellermann
b5750afb24
event/IdleEvent: use `auto`
2020-10-18 19:23:34 +02:00
Max Kellermann
442dd5e955
event/IdleEvent: forbid copying
2020-10-18 19:23:25 +02:00
Max Kellermann
cb382b1e7d
event/PollGroupWinSelect: add missing return value
...
Fixes regression from commit 1473d8474f
2020-10-16 19:02:00 +02:00
Max Kellermann
b611b1824a
event/Loop: move code to Wait()
2020-10-15 20:21:00 +02:00
Max Kellermann
1473d8474f
event/PollGroup: ReadEvents() returns PollResult
2020-10-15 20:15:09 +02:00
Max Kellermann
725985379a
event/SocketEvent: add ScheduleImplicit(), Is{Read,Write}Pending()
2020-10-15 17:01:30 +02:00
Max Kellermann
8849b9b62c
event/SocketEvent: move Abandon() up
2020-10-15 16:59:45 +02:00
Max Kellermann
caa2611ad5
event/SocketEvent: add Abandon()
2020-10-15 16:57:55 +02:00
Max Kellermann
f8ff597963
event/SocketEvent: document Close()
2020-10-15 16:55:31 +02:00
Max Kellermann
ff6e434caf
event/SocketEvent: rename Steal() to ReleaseSocket()
2020-10-15 16:54:33 +02:00
Max Kellermann
55db7105c5
event/SocketEvent: check/clear scheduled_flags in Close()
...
Fixes regression by commit 521e573be9
2020-10-14 21:08:39 +02:00
Max Kellermann
48afb68f3a
event/SocketEvent: remove assert() from GetScheduledFlags()
...
Fixes regression by commit 7901b04c78
2020-10-14 20:50:02 +02:00
Max Kellermann
21f409d5e2
event/SocketEvent: fix grammar
2020-10-14 16:30:38 +02:00
Max Kellermann
521e573be9
event/SocketEvent: use EventLoop::AbandonFD() in Close()
2020-10-14 16:29:49 +02:00
Max Kellermann
abf9ae2dd9
event/Loop: rename Abandon() to AbandonFD()
2020-10-14 16:26:06 +02:00
Max Kellermann
9f013f7de4
event/SocketEvent: allow Close() without socket
2020-10-14 16:26:01 +02:00
Max Kellermann
7fc04fd5cd
event/SocketEvent: move Dispatch() down
2020-10-14 16:21:41 +02:00
Max Kellermann
7901b04c78
event/SocketEvent: allow Cancel() without socket
2020-10-14 16:20:43 +02:00
Max Kellermann
653eea5840
event/SocketEvent: remove unnecessary initializer
2020-10-14 16:18:39 +02:00
Max Kellermann
5a4055fb08
event/SocketMonitor: refactor to SocketEvent
...
Similar to commits 1686f4e857
and
30a5dd267b
2020-10-14 15:54:12 +02:00
Max Kellermann
4d68a12f03
event/Loop: split the AtScopeExit()
...
Fixes the !HAVE_THREADED_EVENT_LOOP build.
2020-10-14 14:47:59 +02:00
Max Kellermann
0e951da64b
event/Loop: add missing #ifdef
2020-10-14 14:37:29 +02:00
Max Kellermann
38dab040b3
event/Loop: add compile-time option to disable multithreading
...
Not for MPD, but for other applications which might want to copy its
event loop, but do not need multi-threading.
2020-10-14 14:08:38 +02:00
Max Kellermann
e9f6af61f9
event/Loop: forward-declare class {Idle,Defer}Event
2020-10-14 14:05:17 +02:00
Max Kellermann
b06c4e2711
event/{Idle,Defer}Event: use base_hook instead of member_hook
...
Allows forward declaration.
2020-10-14 14:04:30 +02:00
Max Kellermann
1686f4e857
event/IdleMonitor: refactor to IdleEvent
...
Instead of using this as a base class implementing a virtual method,
the new class IdleEvent can be used as a variable, decoupling
IdleMonitor's internal state from the derived class.
This is similar to commit 30a5dd267b
which refactored TimeoutMonitor to TimerEvent.
2020-10-14 13:47:25 +02:00
Max Kellermann
329382c1da
event/SignalMonitor: add `noexcept`
2020-10-13 17:26:33 +02:00
Max Kellermann
fadc03df21
meson.build: move macros to event/Features.h
2020-10-13 16:15:52 +02:00
Max Kellermann
54ee0e28ab
event/PollGroup: check _WIN32 instead of USE_WINSELECT
2020-10-13 15:27:58 +02:00
Max Kellermann
92fc53ebef
event/PollGroupWinSelect: use range-based `for`
2020-10-12 12:44:23 +02:00
Max Kellermann
7e7a1613cf
event/PollGroupWinSelect: use std::copy_n()
2020-10-12 12:40:32 +02:00
Max Kellermann
f73c4643ef
event/PollGroupWinSelect: move IsEmpty() check to GetPtr()
2020-10-12 12:39:10 +02:00
Max Kellermann
8b94e8f260
event/PollGroupWinSelect: use `SOCKET` instead of `int`
2020-10-12 12:13:46 +02:00
Max Kellermann
41bc17a27f
event/SocketMonitor: add `ready_flags`
...
By making each SocketMonitor keep track of its ready flags, this
removes a lot of overhead from EventLoop::RemoveFD().
2020-10-09 17:28:11 +02:00
Max Kellermann
41c0bbab13
event/SocketMonitor: don't filter out ERROR/HANGUP
...
By bit-wise ANDing the reported flags with GetScheduledFlags(),
ERROR/HANGUP always get cleared. This means the MPD event loop could
never report those conditions.
2020-10-08 21:16:18 +02:00
Max Kellermann
eeb96eb367
event/TimerEvent: add type alias for std::chrono::steady_clock::duration
2020-10-08 20:48:50 +02:00
Max Kellermann
ce93e58944
event/TimerEvent: use `using` instead of `typedef`
2020-10-08 20:46:18 +02:00
Max Kellermann
263b0ffdbb
event/TimerEvent: use auto_unlink hook
2020-10-08 20:46:15 +02:00
Max Kellermann
22bea5c97e
event/Loop: reorder includes
...
This just happened to break the Windows build because of the
`GetObject` macro in `windows.h`, so I added a kludge to
PollResultGeneric.hxx.
2020-10-08 20:43:21 +02:00
Max Kellermann
947856ca8e
event/Loop: forward-declare class TimerEvent
2020-10-08 17:24:32 +02:00
Max Kellermann
cd9ff9d9b0
event/TimerEvent: use base_hook instead of member_hook
2020-10-08 17:00:09 +02:00
Max Kellermann
4cd0f661d6
event/Loop: use `using` instead of `typedef`
2020-10-08 16:59:21 +02:00
Max Kellermann
ca0179b2a9
event/Loop: set the uring_initialized flag
...
Don't attempt to initialize the io_uring subsystem more than once.
2020-10-06 18:58:54 +02:00
Max Kellermann
cdf8ac001c
event/Loop: integrate io_uring support
2020-05-05 17:13:14 +02:00
Max Kellermann
935e622915
event/Loop: allow calling AddFD()... before starting the EventThread
...
Relax the assertions. This is necessary if BlockingCall() is used
before the thread is started.
2020-05-05 17:10:17 +02:00
Max Kellermann
0b3acc3eec
release v0.21.23
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl6huEwQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEgcrD/9jLUkiszNc+QWbUGj+RiTaD6fMxA1M8itn
nB7MKI/g/3ggryWMWNhG51O+8wFNs/4PmJJPGxKoU6i6wmS3YFhTAcs0ryilDGAU
1FumnMg/2qIyi2E6K2BMbi0YwZiJhBPWwD4JSt1KGvwPes/qQPFgHAi7ZWhP3tar
fHmgmjwDZ/Kgpl5/Bn7nVNgVuzk/MpBOSwxX9tFtRxqE9wdpm9idve7SVDT7MTvk
vdONWbAe8jXl/A8JHWaUsws0l7fyK5ZKSOXvdeSbzd67I8Rz3aqJMqUh2k/rDuv/
GrDyeEtLV5cXZsL4B3/34kCTKac2ZJmRbSh+buKeDc1Gf0clWnvRMdsMbSoRBY4F
lTWJbjndfq2+iHHBRfaqRjombv52R11yLT+O0aMLEm6l7xPm/rHZXJIcYSmCafd7
FR1qMaVKP5s+M+MqGePxzCUJSWJ+1bjZwjLaHrYXYPUoXSg3mSaeDE5g7BjQhm1E
2Hcfui9lvqR55UNo0NvDBjRT5FBGBUdjF6DjYplUGApw7xFtdahXlEvG7yfyg3ae
pZ3FQ1MZ4dESAw7EhTEBwajsVRQ9DhGQenYTxxCnGVdCucZRPQ9Abhas0U4iFHUA
wGj7j4WKPi+OUSyiT0j4nGuwEVtCkBFv34DqPMLjx8jqtJ8YgCt4iJD4dFwhk1zz
uoQBhq27Gg==
=sR2r
-----END PGP SIGNATURE-----
Merge tag 'v0.21.23'
release v0.21.23
2020-04-23 18:01:23 +02:00
Max Kellermann
8ed533acf3
event/SocketMonitor: handle epoll_ctl()=EBADF/ENOENT in Schedule()
...
This fixes a freeze bug in the NFS input/storage plugins: when libnfs
auto-reconnets after a failure, it installs the new socket on the same
file descriptor number. MPD's attempt to unregister the old socket by
calling SocketMonitor::Steal() from NfsConnection::ScheduleSocket()
fails because the new/old socket number is not registered in epoll, so
epoll_ctl() returns ENOENT. The problem is that it left
`scheduled_flags`, and so subsequent Schedule() calls will use
`EPOLL_CTL_MOD`, which will fail again and again. Instead, we need to
use `EPOLL_CTL_ADD` to register the new socket.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/806
Closes https://github.com/MusicPlayerDaemon/MPD/issues/756
2020-04-23 16:58:26 +02:00
Max Kellermann
4242aee21e
event/SocketMonitor: remove HANGUP|ERROR from ScheduleRead()
...
These flags are output-only. Using them here is misleading.
2020-04-23 15:18:18 +02:00
Max Kellermann
e71bd2a08b
event/PollGroupWinSelect: make EVENT_{READ,WRITE} `static`
2020-04-23 15:10:57 +02:00
Max Kellermann
12b97bbe38
release v0.21.22
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl6GCWgQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEvkQD/9qg6cnCgCKSOmTjteJu1ayeXBMDiL3cCCg
AwarHQoxsB0102NpV+MLka+4HIwHn+WNL55TzYgfbSh0nfmnki2fZ0YpsZoQR79w
MP11iMPnFH1oKqj58minBkFNmAis2aLYHJGKaQNUh7wcf0WhbVTqtWBUrKb07RQ0
Zj5lXtg65O/+yaCVdQGS6fMk2t7CqBM+S3RmbXCib/JRMC6aozoC7nWPvj8b2R8d
PgxwKMRzyslyFoxDQZrusDjJ1piyigzUMMr32yzYDED4Xr8jsEELaJfULbr6qWT2
ZNYF91e+D5V7riASAtlFTaVMaISx4QbHjKWR5Xcx0q/SJPAXTxF8RrAqGvqpWYmc
kqmC8iNxQsW5o3sNhI9qg6sOkq2dIu43VasRCvuo19GABR36wwTK5ORoazIi8fbU
/Ki/oZHtZczHRop9Cd6698Qr9jyTPdIs55FbgejzrVADvAmslqtcA6XxCBuG1nSF
Qo48dp9Px7J74qNNuDt5/xLnQGJKaW60/BXrMK9G9QG4x9r4zuCayDO6Qc7FMWWR
DG7k9nYoXJU5YG7xp9Rk+Yj3Ade8kqhTnKfqw0f2JfkLt0ChPG+rZcxICWSdzZm0
AfHxuEQlwKaaFHFEsZhVehlsXkeU9OVywo+QDzmY2uqQ2ddlBZ47Qm2MWgTsv8i/
euVsrzLtag==
=EedX
-----END PGP SIGNATURE-----
Merge tag 'v0.21.22'
release v0.21.22
2020-04-02 18:02:10 +02:00
Max Kellermann
e94c436264
src/event/meson.build: depend in libnet.a
...
The event library uses various libnet.a classes,
e.g. SocketDescriptor.
2020-04-02 17:16:05 +02:00
Max Kellermann
8cd5e79fbd
event/*, ...: make GetEventLoop() const
2020-03-26 17:19:13 +01:00
Rosen Penev
f319f88df4
[cppcheck] use const for several variables
...
Found with constVariable
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-23 21:03:22 -07:00
Rosen Penev
97425d56e7
remove gcc_unused
...
[[maybe_unused]] (introduced in C++17) is standard C++.
https://clang.llvm.org/docs/AttributeReference.html#maybe-unused-unused
says that this is equivalent to the GNU unused attribute.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-16 00:08:21 -07:00
Rosen Penev
a2f5a63bbc
replace stdint.h with cstdint
...
The former is deprecated by C++14. The standard says they are the same:
The header defines all types and macros the same as the C standard library
header<stdint.h>.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 19:04:39 -07:00
Rosen Penev
2db8bcc353
replace stddef.h with cstddef
...
The former is deprecated with C++14. The standard says both are the same:
The contents and meaning of the header<cstddef>are the same as the C
standard library header<stddef.h>,except that it does not declare the type
wchar_t, that it also declares the type byte and its associated
operations (21.2.5), and as noted in 21.2.3 and 21.2.4.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 19:04:38 -07:00
Rosen Penev
69a51e12c9
replace signal.h with csignal.h
...
The former was deprecated with C++14. The standard says they are the same:
The contents of the header<csignal>are the same as the C standard library
header<signal.h>.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 18:56:51 -07:00
Rosen Penev
edc4989d9c
change errno.h to cerrno
...
The former is deprecated by C++14. It's also functionally the same.
From the standard:
19.4
The header<cerrno>is described in Table 43. Its contents are the same as
the POSIX header<errno.h>,except that errno shall be defined as a macro.
[Note: The intent is to remain in close alignment with the POSIX
standard.] A separate errno value shall be provided for each thread.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 15:51:16 -07:00
Rosen Penev
ab9f5d2067
replace assert.h with cassert
...
The former was deprecated with C++14.
According to the C++11 and C++17 standards, both files are identical.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 15:25:38 -07:00
Rosen Penev
f00f8b002a
[clang-tidy] use nodiscard
...
Introduced in C++17. It replaces gcc's warn_unused_result.
Found with modernize-use-nodiscard.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-03-12 12:59:16 -07:00
Rosen Penev
afb29942b0
[clang-tidy] simplify boolean expressions
...
Found with readability-simplify-boolean-expr
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-02-01 19:47:47 -08:00
Max Kellermann
bc6eca2115
*: add `explicit`
2020-02-01 14:02:43 +01:00
Rosen Penev
b64fdae938
[clang-tidy] use override instead of virtual
...
Found with modernize-use-override
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2020-01-31 21:27:26 -08:00
Max Kellermann
7551867249
meson.build: move Log.cxx and LogBackend.cxx into a static library
...
Prevents compiling those sources many times, once for each debug
program using it.
2020-01-18 19:56:16 +01:00
Max Kellermann
2817bf9e95
copyright year 2020
2020-01-18 19:23:49 +01:00
Max Kellermann
803a48e96d
release v0.21.18
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl4CKwwQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEp46D/9q1pRkhYzCyZPQGX967UPoV+Bc1YMX4o2U
Uh/HqQrKKRAK9goaxu9yMKBIFCbzj6WEZou+/uMEf6ZwXuRcnJMobrUU4+G9Yu3r
FzlQPW870DyOhk2PWHF8CW3oMt/YH05b6nYNo2ocRnX69/oqL1G7ukbF2Pz3TPc0
0uNQYYERdMawNCEi1OarzziR6DKuiN+MtZRgUQVacAsoUirwWGNJuaGSDtc3MMM7
YhgKVmd9XsgVr7fykArj6PLsm2iyXJP5nDB/tIqmwMpQFyhuLUnGOMfhCq02em+r
47LGvmZiSS/9F2JzPU8EL2yzYdBe4QvU6Ol5SfXbom11MZc3Ty502g2jUXVHjCeo
1FljCPHbarTmKhvUc0xQXA9i6exZ0wwtxL+Zv7ZQKquRPAhq8E07qkQpdaTWa6vn
3RfilLE1B/GCgoT6D1+zABxdJ1HRLT7tzFob2kkCccxguK3j2JjCUIkSgM6IY0yv
a6sMEXbqa+Lh8jggs9ksoT6O+T2HHEr3tEfpFHY+t0NFRfwHd9aX9bNjK+Ji0n51
YBf2FCb2EBrMAWNZmEnq+TuKX0HASDtoAXTviRKqBXtEG5V8MdAt4PPICCb+bkDr
psIuYcGeK3vofvq1SwEC7h7gCvsBK5w17/oE2/jYcZLo12H1IdHe5gMP3OUhjel5
BRi6rLlkYw==
=XXXs
-----END PGP SIGNATURE-----
Merge tag 'v0.21.18'
release v0.21.18
2019-12-24 16:31:06 +01:00
Max Kellermann
f1116c9258
event/Loop: remove bogus assertion
...
Can fail if somebody calls Break().
2019-12-23 14:20:09 +01:00
Max Kellermann
9a577f8060
event/MultiSocketMonitor: add workaround for /dev/null
...
The ALSA "null" driver opens /dev/null and returns the file handle
from snd_pcm_poll_descriptors(), but /dev/null cannot be used with
epoll, the epoll_ctl() system call returns -EPERM. This means that
the ALSA output hangs, eventually freezing the whole MPD process.
This commit adds a workaround to the MultiSocketMonitor class which is
used by the ALSA output plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/695
2019-12-22 12:08:44 +01:00
Max Kellermann
d75a0d714e
event/MultiSocketMonitor: remove unnecessary `friend` declaration
2019-12-22 12:08:44 +01:00
Max Kellermann
9be3a1554e
event/MultiSocketMonitor: remove duplicate IdleMonitor::Schedule() call
...
SetReady() does this already.
2019-12-22 12:08:10 +01:00
Max Kellermann
7764719513
event/MultiSocketMonitor: un-inline AddSocket()
2019-12-22 12:00:12 +01:00
Max Kellermann
dcbb9fe07c
event/Loop: round timeout up to avoid unnecessary wakeups
2019-12-22 11:58:31 +01:00
Max Kellermann
e3b347820a
event/MultiSocketMonitor: use std::exchange()
2019-12-20 13:42:35 +01:00
Max Kellermann
a84bf5a92e
event/MultiSocketMonitor: AddSocket() returns bool
2019-12-18 17:50:21 +01:00
Max Kellermann
732bdc800d
event/SocketMonitor: Schedule() returns bool
2019-12-18 17:46:33 +01:00
Max Kellermann
8f981845dc
switch to C++17
...
Time to move on, two years after 2017.
2019-08-03 12:57:56 +02:00
Max Kellermann
d663f81420
include cleanups (powered by iwyu)
2019-07-05 09:59:58 +02:00
Max Kellermann
a139279575
Copyright year 2019
2019-06-17 11:17:30 +02:00
Max Kellermann
620a39afb4
thread/Slack: use std::chrono::duration
2019-05-29 21:11:32 +02:00
Max Kellermann
9d1906da8a
{event,output}/Thread: downgrade realtime scheduling errors to "info"
...
These messages can be confusing, but they are not critical.
2019-05-23 14:24:27 +02:00
Max Kellermann
973c87b351
event/Call, ...: use wait() with predicate
2019-05-07 20:01:45 +02:00
Max Kellermann
92022658f9
thread/Cond: add wait() overload which takes a unique_lock<>
...
Just like std::condition_variable, which however has no way to specify
the std::mutex directly.
2019-04-26 11:51:45 +02:00
Max Kellermann
b51bae5500
thread/*Cond: rename methods to match std::condition_variable
2019-04-25 19:46:43 +02:00
Max Kellermann
5bc8cd0ecb
event/Call: use std::lock_guard
2019-04-25 19:45:52 +02:00
Max Kellermann
0e48747607
event/Call: use std::lock_guard
2019-04-25 18:57:58 +02:00
Max Kellermann
093bf5d859
event/*, ...: make GetEventLoop() const
2019-04-04 20:07:57 +02:00
Max Kellermann
43677d5740
event/MaskMonitor: add `noexcept`
2019-04-04 19:54:17 +02:00
Max Kellermann
ea5e6d8f33
Merge branch 'v0.21.x'
2019-04-04 10:29:58 +02:00
Max Kellermann
f6941f9a44
event/SocketMonitor: don't cancel if OnSocketReady() returns false
...
Expect OnSocketReady() to cancel events. If it returns false, the
SocketMonitor may be destructed already. This fixes a use-after-free
bug in the "httpd" output plugin.
2019-04-04 10:24:58 +02:00
Max Kellermann
d2eb4df8fc
event/{Fully,}BufferedSocket: add more API documentation
2019-04-04 10:24:58 +02:00
Max Kellermann
c340485dd5
client: make GetEventLoop() public
2019-04-03 14:32:28 +02:00