event/MultiSocketMonitor: add "noexcept"
This commit is contained in:
parent
cf483107c9
commit
c582a9faae
|
@ -27,13 +27,13 @@
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MultiSocketMonitor::MultiSocketMonitor(EventLoop &_loop)
|
MultiSocketMonitor::MultiSocketMonitor(EventLoop &_loop) noexcept
|
||||||
:IdleMonitor(_loop),
|
:IdleMonitor(_loop),
|
||||||
timeout_event(_loop, BIND_THIS_METHOD(OnTimeout)) {
|
timeout_event(_loop, BIND_THIS_METHOD(OnTimeout)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MultiSocketMonitor::Reset()
|
MultiSocketMonitor::Reset() noexcept
|
||||||
{
|
{
|
||||||
assert(GetEventLoop().IsInside());
|
assert(GetEventLoop().IsInside());
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ MultiSocketMonitor::Reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MultiSocketMonitor::ClearSocketList()
|
MultiSocketMonitor::ClearSocketList() noexcept
|
||||||
{
|
{
|
||||||
assert(GetEventLoop().IsInside());
|
assert(GetEventLoop().IsInside());
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ MultiSocketMonitor::ClearSocketList()
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
|
||||||
void
|
void
|
||||||
MultiSocketMonitor::ReplaceSocketList(pollfd *pfds, unsigned n)
|
MultiSocketMonitor::ReplaceSocketList(pollfd *pfds, unsigned n) noexcept
|
||||||
{
|
{
|
||||||
pollfd *const end = pfds + n;
|
pollfd *const end = pfds + n;
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ MultiSocketMonitor::ReplaceSocketList(pollfd *pfds, unsigned n)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
MultiSocketMonitor::Prepare()
|
MultiSocketMonitor::Prepare() noexcept
|
||||||
{
|
{
|
||||||
const auto timeout = PrepareSockets();
|
const auto timeout = PrepareSockets();
|
||||||
if (timeout >= timeout.zero())
|
if (timeout >= timeout.zero())
|
||||||
|
|
|
@ -52,30 +52,30 @@ class MultiSocketMonitor : IdleMonitor
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SingleFD(MultiSocketMonitor &_multi, SocketDescriptor _fd,
|
SingleFD(MultiSocketMonitor &_multi, SocketDescriptor _fd,
|
||||||
unsigned events)
|
unsigned events) noexcept
|
||||||
:SocketMonitor(_fd, _multi.GetEventLoop()),
|
:SocketMonitor(_fd, _multi.GetEventLoop()),
|
||||||
multi(_multi), revents(0) {
|
multi(_multi), revents(0) {
|
||||||
Schedule(events);
|
Schedule(events);
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketDescriptor GetSocket() const {
|
SocketDescriptor GetSocket() const noexcept {
|
||||||
return SocketMonitor::GetSocket();
|
return SocketMonitor::GetSocket();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned GetEvents() const {
|
unsigned GetEvents() const noexcept {
|
||||||
return SocketMonitor::GetScheduledFlags();
|
return SocketMonitor::GetScheduledFlags();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetEvents(unsigned _events) {
|
void SetEvents(unsigned _events) noexcept {
|
||||||
revents &= _events;
|
revents &= _events;
|
||||||
SocketMonitor::Schedule(_events);
|
SocketMonitor::Schedule(_events);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned GetReturnedEvents() const {
|
unsigned GetReturnedEvents() const noexcept {
|
||||||
return revents;
|
return revents;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearReturnedEvents() {
|
void ClearReturnedEvents() noexcept {
|
||||||
revents = 0;
|
revents = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ public:
|
||||||
static constexpr unsigned ERROR = SocketMonitor::ERROR;
|
static constexpr unsigned ERROR = SocketMonitor::ERROR;
|
||||||
static constexpr unsigned HANGUP = SocketMonitor::HANGUP;
|
static constexpr unsigned HANGUP = SocketMonitor::HANGUP;
|
||||||
|
|
||||||
MultiSocketMonitor(EventLoop &_loop);
|
MultiSocketMonitor(EventLoop &_loop) noexcept;
|
||||||
|
|
||||||
using IdleMonitor::GetEventLoop;
|
using IdleMonitor::GetEventLoop;
|
||||||
|
|
||||||
|
@ -132,13 +132,13 @@ public:
|
||||||
* meantime the #EventLoop thread could invoke those pure
|
* meantime the #EventLoop thread could invoke those pure
|
||||||
* methods.
|
* methods.
|
||||||
*/
|
*/
|
||||||
void Reset();
|
void Reset() noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invalidate the socket list. A call to PrepareSockets() is
|
* Invalidate the socket list. A call to PrepareSockets() is
|
||||||
* scheduled which will then update the list.
|
* scheduled which will then update the list.
|
||||||
*/
|
*/
|
||||||
void InvalidateSockets() {
|
void InvalidateSockets() noexcept {
|
||||||
refresh = true;
|
refresh = true;
|
||||||
IdleMonitor::Schedule();
|
IdleMonitor::Schedule();
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ public:
|
||||||
*
|
*
|
||||||
* May only be called from PrepareSockets().
|
* May only be called from PrepareSockets().
|
||||||
*/
|
*/
|
||||||
void AddSocket(SocketDescriptor fd, unsigned events) {
|
void AddSocket(SocketDescriptor fd, unsigned events) noexcept {
|
||||||
fds.emplace_front(*this, fd, events);
|
fds.emplace_front(*this, fd, events);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ public:
|
||||||
*
|
*
|
||||||
* May only be called from PrepareSockets().
|
* May only be called from PrepareSockets().
|
||||||
*/
|
*/
|
||||||
void ClearSocketList();
|
void ClearSocketList() noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the known sockets by invoking the given function for
|
* Update the known sockets by invoking the given function for
|
||||||
|
@ -168,7 +168,7 @@ public:
|
||||||
* May only be called from PrepareSockets().
|
* May only be called from PrepareSockets().
|
||||||
*/
|
*/
|
||||||
template<typename E>
|
template<typename E>
|
||||||
void UpdateSocketList(E &&e) {
|
void UpdateSocketList(E &&e) noexcept {
|
||||||
for (auto prev = fds.before_begin(), end = fds.end(),
|
for (auto prev = fds.before_begin(), end = fds.end(),
|
||||||
i = std::next(prev);
|
i = std::next(prev);
|
||||||
i != end; i = std::next(prev)) {
|
i != end; i = std::next(prev)) {
|
||||||
|
@ -191,7 +191,7 @@ public:
|
||||||
*
|
*
|
||||||
* May only be called from PrepareSockets().
|
* May only be called from PrepareSockets().
|
||||||
*/
|
*/
|
||||||
void ReplaceSocketList(pollfd *pfds, unsigned n);
|
void ReplaceSocketList(pollfd *pfds, unsigned n) noexcept;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -202,23 +202,23 @@ protected:
|
||||||
*
|
*
|
||||||
* @return timeout or a negative value for no timeout
|
* @return timeout or a negative value for no timeout
|
||||||
*/
|
*/
|
||||||
virtual std::chrono::steady_clock::duration PrepareSockets() = 0;
|
virtual std::chrono::steady_clock::duration PrepareSockets() noexcept = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* At least one socket is ready or the timeout has expired.
|
* At least one socket is ready or the timeout has expired.
|
||||||
* This method should be used to perform I/O.
|
* This method should be used to perform I/O.
|
||||||
*/
|
*/
|
||||||
virtual void DispatchSockets() = 0;
|
virtual void DispatchSockets() noexcept = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetReady() {
|
void SetReady() noexcept {
|
||||||
ready = true;
|
ready = true;
|
||||||
IdleMonitor::Schedule();
|
IdleMonitor::Schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Prepare();
|
void Prepare() noexcept;
|
||||||
|
|
||||||
void OnTimeout() {
|
void OnTimeout() noexcept {
|
||||||
SetReady();
|
SetReady();
|
||||||
IdleMonitor::Schedule();
|
IdleMonitor::Schedule();
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,8 +141,9 @@ private:
|
||||||
defer_invalidate_sockets.Schedule();
|
defer_invalidate_sockets.Schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual std::chrono::steady_clock::duration PrepareSockets() override;
|
/* virtual methods from class MultiSocketMonitor */
|
||||||
virtual void DispatchSockets() override;
|
std::chrono::steady_clock::duration PrepareSockets() noexcept override;
|
||||||
|
void DispatchSockets() noexcept override;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline InputStream *
|
inline InputStream *
|
||||||
|
@ -172,7 +173,7 @@ AlsaInputStream::Create(EventLoop &event_loop, const char *uri,
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::steady_clock::duration
|
std::chrono::steady_clock::duration
|
||||||
AlsaInputStream::PrepareSockets()
|
AlsaInputStream::PrepareSockets() noexcept
|
||||||
{
|
{
|
||||||
if (IsPaused()) {
|
if (IsPaused()) {
|
||||||
ClearSocketList();
|
ClearSocketList();
|
||||||
|
@ -183,7 +184,7 @@ AlsaInputStream::PrepareSockets()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AlsaInputStream::DispatchSockets()
|
AlsaInputStream::DispatchSockets() noexcept
|
||||||
{
|
{
|
||||||
const std::lock_guard<Mutex> protect(mutex);
|
const std::lock_guard<Mutex> protect(mutex);
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual std::chrono::steady_clock::duration PrepareSockets() override;
|
std::chrono::steady_clock::duration PrepareSockets() noexcept override;
|
||||||
virtual void DispatchSockets() override;
|
void DispatchSockets() noexcept override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AlsaMixer final : public Mixer {
|
class AlsaMixer final : public Mixer {
|
||||||
|
@ -103,7 +103,7 @@ public:
|
||||||
static constexpr Domain alsa_mixer_domain("alsa_mixer");
|
static constexpr Domain alsa_mixer_domain("alsa_mixer");
|
||||||
|
|
||||||
std::chrono::steady_clock::duration
|
std::chrono::steady_clock::duration
|
||||||
AlsaMixerMonitor::PrepareSockets()
|
AlsaMixerMonitor::PrepareSockets() noexcept
|
||||||
{
|
{
|
||||||
if (mixer == nullptr) {
|
if (mixer == nullptr) {
|
||||||
ClearSocketList();
|
ClearSocketList();
|
||||||
|
@ -114,7 +114,7 @@ AlsaMixerMonitor::PrepareSockets()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AlsaMixerMonitor::DispatchSockets()
|
AlsaMixerMonitor::DispatchSockets() noexcept
|
||||||
{
|
{
|
||||||
assert(mixer != nullptr);
|
assert(mixer != nullptr);
|
||||||
|
|
||||||
|
|
|
@ -297,8 +297,8 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* virtual methods from class MultiSocketMonitor */
|
/* virtual methods from class MultiSocketMonitor */
|
||||||
virtual std::chrono::steady_clock::duration PrepareSockets() override;
|
std::chrono::steady_clock::duration PrepareSockets() noexcept override;
|
||||||
virtual void DispatchSockets() override;
|
void DispatchSockets() noexcept override;
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr Domain alsa_output_domain("alsa_output");
|
static constexpr Domain alsa_output_domain("alsa_output");
|
||||||
|
@ -799,7 +799,7 @@ AlsaOutput::Play(const void *chunk, size_t size)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::steady_clock::duration
|
std::chrono::steady_clock::duration
|
||||||
AlsaOutput::PrepareSockets()
|
AlsaOutput::PrepareSockets() noexcept
|
||||||
{
|
{
|
||||||
if (LockHasError()) {
|
if (LockHasError()) {
|
||||||
ClearSocketList();
|
ClearSocketList();
|
||||||
|
@ -810,7 +810,7 @@ AlsaOutput::PrepareSockets()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AlsaOutput::DispatchSockets()
|
AlsaOutput::DispatchSockets() noexcept
|
||||||
try {
|
try {
|
||||||
{
|
{
|
||||||
const std::lock_guard<Mutex> lock(mutex);
|
const std::lock_guard<Mutex> lock(mutex);
|
||||||
|
|
Loading…
Reference in New Issue