event/TimerEvent: add type alias for std::chrono::steady_clock::duration
This commit is contained in:
		@@ -21,17 +21,16 @@
 | 
			
		||||
#define MPD_STATE_FILE_CONFIG_HXX
 | 
			
		||||
 | 
			
		||||
#include "fs/AllocatedPath.hxx"
 | 
			
		||||
 | 
			
		||||
#include <chrono>
 | 
			
		||||
#include "event/Chrono.hxx"
 | 
			
		||||
 | 
			
		||||
struct ConfigData;
 | 
			
		||||
 | 
			
		||||
struct StateFileConfig {
 | 
			
		||||
	static constexpr std::chrono::steady_clock::duration DEFAULT_INTERVAL = std::chrono::minutes(2);
 | 
			
		||||
	static constexpr Event::Duration DEFAULT_INTERVAL = std::chrono::minutes(2);
 | 
			
		||||
 | 
			
		||||
	AllocatedPath path;
 | 
			
		||||
 | 
			
		||||
	std::chrono::steady_clock::duration interval;
 | 
			
		||||
	Event::Duration interval;
 | 
			
		||||
 | 
			
		||||
	bool restore_paused;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
#define CLIENT_MAX_COMMAND_LIST_DEFAULT		(2048*1024)
 | 
			
		||||
#define CLIENT_MAX_OUTPUT_BUFFER_SIZE_DEFAULT	(8192*1024)
 | 
			
		||||
 | 
			
		||||
std::chrono::steady_clock::duration client_timeout;
 | 
			
		||||
Event::Duration client_timeout;
 | 
			
		||||
size_t client_max_command_list_size;
 | 
			
		||||
size_t client_max_output_buffer_size;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,11 +20,11 @@
 | 
			
		||||
#ifndef MPD_CLIENT_CONFIG_HXX
 | 
			
		||||
#define MPD_CLIENT_CONFIG_HXX
 | 
			
		||||
 | 
			
		||||
#include <chrono>
 | 
			
		||||
#include "event/Chrono.hxx"
 | 
			
		||||
 | 
			
		||||
struct ConfigData;
 | 
			
		||||
 | 
			
		||||
extern std::chrono::steady_clock::duration client_timeout;
 | 
			
		||||
extern Event::Duration client_timeout;
 | 
			
		||||
extern size_t client_max_command_list_size;
 | 
			
		||||
extern size_t client_max_output_buffer_size;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ Client::SetExpired() noexcept
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	FullyBufferedSocket::Close();
 | 
			
		||||
	timeout_event.Schedule(std::chrono::steady_clock::duration::zero());
 | 
			
		||||
	timeout_event.Schedule(Event::Duration::zero());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
 * UpdateService::Enqueue().  This increases the probability that
 | 
			
		||||
 * updates can be bundled.
 | 
			
		||||
 */
 | 
			
		||||
static constexpr std::chrono::steady_clock::duration INOTIFY_UPDATE_DELAY =
 | 
			
		||||
static constexpr Event::Duration INOTIFY_UPDATE_DELAY =
 | 
			
		||||
	std::chrono::seconds(5);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								src/event/Chrono.hxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/event/Chrono.hxx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2003-2020 The Music Player Daemon Project
 | 
			
		||||
 * http://www.musicpd.org
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License along
 | 
			
		||||
 * with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef MPD_EVENT_CHRONO_HXX
 | 
			
		||||
#define MPD_EVENT_CHRONO_HXX
 | 
			
		||||
 | 
			
		||||
#include <chrono>
 | 
			
		||||
 | 
			
		||||
namespace Event {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The clock used by class #EventLoop and class #TimerEvent.
 | 
			
		||||
 */
 | 
			
		||||
using Clock = std::chrono::steady_clock;
 | 
			
		||||
 | 
			
		||||
using Duration = Clock::duration;
 | 
			
		||||
 | 
			
		||||
} // namespace Event
 | 
			
		||||
 | 
			
		||||
#endif /* MAIN_NOTIFY_H */
 | 
			
		||||
@@ -122,7 +122,7 @@ EventLoop::RemoveIdle(IdleMonitor &i) noexcept
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
EventLoop::AddTimer(TimerEvent &t, std::chrono::steady_clock::duration d) noexcept
 | 
			
		||||
EventLoop::AddTimer(TimerEvent &t, Event::Duration d) noexcept
 | 
			
		||||
{
 | 
			
		||||
	assert(IsInside());
 | 
			
		||||
 | 
			
		||||
@@ -131,10 +131,10 @@ EventLoop::AddTimer(TimerEvent &t, std::chrono::steady_clock::duration d) noexce
 | 
			
		||||
	again = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline std::chrono::steady_clock::duration
 | 
			
		||||
inline Event::Duration
 | 
			
		||||
EventLoop::HandleTimers() noexcept
 | 
			
		||||
{
 | 
			
		||||
	std::chrono::steady_clock::duration timeout;
 | 
			
		||||
	Event::Duration timeout;
 | 
			
		||||
 | 
			
		||||
	while (!quit) {
 | 
			
		||||
		auto i = timers.begin();
 | 
			
		||||
@@ -151,7 +151,7 @@ EventLoop::HandleTimers() noexcept
 | 
			
		||||
		t.Run();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
	return Event::Duration(-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -160,7 +160,7 @@ EventLoop::HandleTimers() noexcept
 | 
			
		||||
 * value (= never times out) is translated to the magic value -1.
 | 
			
		||||
 */
 | 
			
		||||
static constexpr int
 | 
			
		||||
ExportTimeoutMS(std::chrono::steady_clock::duration timeout)
 | 
			
		||||
ExportTimeoutMS(Event::Duration timeout)
 | 
			
		||||
{
 | 
			
		||||
	return timeout >= timeout.zero()
 | 
			
		||||
		/* round up (+1) to avoid unnecessary wakeups */
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@
 | 
			
		||||
#ifndef MPD_EVENT_LOOP_HXX
 | 
			
		||||
#define MPD_EVENT_LOOP_HXX
 | 
			
		||||
 | 
			
		||||
#include "Chrono.hxx"
 | 
			
		||||
#include "PollGroup.hxx"
 | 
			
		||||
#include "WakeFD.hxx"
 | 
			
		||||
#include "SocketMonitor.hxx"
 | 
			
		||||
@@ -91,7 +92,7 @@ class EventLoop final : SocketMonitor
 | 
			
		||||
	std::unique_ptr<Uring::Manager> uring;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
 | 
			
		||||
	Event::Clock::time_point now = Event::Clock::now();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Is this #EventLoop alive, i.e. can events be scheduled?
 | 
			
		||||
@@ -140,9 +141,9 @@ public:
 | 
			
		||||
	~EventLoop() noexcept;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * A caching wrapper for std::chrono::steady_clock::now().
 | 
			
		||||
	 * A caching wrapper for Event::Clock::now().
 | 
			
		||||
	 */
 | 
			
		||||
	std::chrono::steady_clock::time_point GetTime() const {
 | 
			
		||||
	auto GetTime() const {
 | 
			
		||||
		assert(IsInside());
 | 
			
		||||
 | 
			
		||||
		return now;
 | 
			
		||||
@@ -184,8 +185,7 @@ public:
 | 
			
		||||
	void AddIdle(IdleMonitor &i) noexcept;
 | 
			
		||||
	void RemoveIdle(IdleMonitor &i) noexcept;
 | 
			
		||||
 | 
			
		||||
	void AddTimer(TimerEvent &t,
 | 
			
		||||
		      std::chrono::steady_clock::duration d) noexcept;
 | 
			
		||||
	void AddTimer(TimerEvent &t, Event::Duration d) noexcept;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Schedule a call to DeferEvent::RunDeferred().
 | 
			
		||||
@@ -221,7 +221,7 @@ private:
 | 
			
		||||
	 * duration until the next timer expires.  Returns a negative
 | 
			
		||||
	 * duration if there is no timeout.
 | 
			
		||||
	 */
 | 
			
		||||
	std::chrono::steady_clock::duration HandleTimers() noexcept;
 | 
			
		||||
	Event::Duration HandleTimers() noexcept;
 | 
			
		||||
 | 
			
		||||
	bool OnSocketReady(unsigned flags) noexcept override;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,7 @@ MultiSocketMonitor::Prepare() noexcept
 | 
			
		||||
		/* if there was at least one file descriptor not
 | 
			
		||||
		   supported by epoll, install a very short timeout
 | 
			
		||||
		   because we assume it's always ready */
 | 
			
		||||
		constexpr std::chrono::steady_clock::duration ready_timeout =
 | 
			
		||||
		constexpr Event::Duration ready_timeout =
 | 
			
		||||
			std::chrono::milliseconds(1);
 | 
			
		||||
		if (timeout < timeout.zero() || timeout > ready_timeout)
 | 
			
		||||
			timeout = ready_timeout;
 | 
			
		||||
 
 | 
			
		||||
@@ -226,7 +226,7 @@ protected:
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return timeout or a negative value for no timeout
 | 
			
		||||
	 */
 | 
			
		||||
	virtual std::chrono::steady_clock::duration PrepareSockets() noexcept = 0;
 | 
			
		||||
	virtual Event::Duration PrepareSockets() noexcept = 0;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * At least one socket is ready or the timeout has expired.
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
#include "Loop.hxx"
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
TimerEvent::Schedule(std::chrono::steady_clock::duration d) noexcept
 | 
			
		||||
TimerEvent::Schedule(Event::Duration d) noexcept
 | 
			
		||||
{
 | 
			
		||||
	Cancel();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,12 +20,11 @@
 | 
			
		||||
#ifndef MPD_TIMER_EVENT_HXX
 | 
			
		||||
#define MPD_TIMER_EVENT_HXX
 | 
			
		||||
 | 
			
		||||
#include "Chrono.hxx"
 | 
			
		||||
#include "util/BindMethod.hxx"
 | 
			
		||||
 | 
			
		||||
#include <boost/intrusive/set_hook.hpp>
 | 
			
		||||
 | 
			
		||||
#include <chrono>
 | 
			
		||||
 | 
			
		||||
class EventLoop;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -50,7 +49,7 @@ class TimerEvent final
 | 
			
		||||
	 * When is this timer due?  This is only valid if IsActive()
 | 
			
		||||
	 * returns true.
 | 
			
		||||
	 */
 | 
			
		||||
	std::chrono::steady_clock::time_point due;
 | 
			
		||||
	Event::Clock::time_point due;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	TimerEvent(EventLoop &_loop, Callback _callback) noexcept
 | 
			
		||||
@@ -65,7 +64,7 @@ public:
 | 
			
		||||
		return is_linked();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void Schedule(std::chrono::steady_clock::duration d) noexcept;
 | 
			
		||||
	void Schedule(Event::Duration d) noexcept;
 | 
			
		||||
 | 
			
		||||
	void Cancel() noexcept {
 | 
			
		||||
		unlink();
 | 
			
		||||
 
 | 
			
		||||
@@ -127,7 +127,7 @@ private:
 | 
			
		||||
	int Recover(int err);
 | 
			
		||||
 | 
			
		||||
	/* virtual methods from class MultiSocketMonitor */
 | 
			
		||||
	std::chrono::steady_clock::duration PrepareSockets() noexcept override;
 | 
			
		||||
	Event::Duration PrepareSockets() noexcept override;
 | 
			
		||||
	void DispatchSockets() noexcept override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -219,12 +219,12 @@ AlsaInputStream::Create(EventLoop &event_loop, const char *uri,
 | 
			
		||||
	return std::make_unique<AlsaInputStream>(event_loop, mutex, spec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::chrono::steady_clock::duration
 | 
			
		||||
Event::Duration
 | 
			
		||||
AlsaInputStream::PrepareSockets() noexcept
 | 
			
		||||
{
 | 
			
		||||
	if (IsPaused()) {
 | 
			
		||||
		ClearSocketList();
 | 
			
		||||
		return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
		return Event::Duration(-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return non_block.PrepareSockets(*this, capture_handle);
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
#include "event/MultiSocketMonitor.hxx"
 | 
			
		||||
#include "util/RuntimeError.hxx"
 | 
			
		||||
 | 
			
		||||
std::chrono::steady_clock::duration
 | 
			
		||||
Event::Duration
 | 
			
		||||
AlsaNonBlockPcm::PrepareSockets(MultiSocketMonitor &m, snd_pcm_t *pcm)
 | 
			
		||||
{
 | 
			
		||||
	int count = snd_pcm_poll_descriptors_count(pcm);
 | 
			
		||||
@@ -45,7 +45,7 @@ AlsaNonBlockPcm::PrepareSockets(MultiSocketMonitor &m, snd_pcm_t *pcm)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	m.ReplaceSocketList(pfds, count);
 | 
			
		||||
	return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
	return Event::Duration(-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -75,13 +75,13 @@ AlsaNonBlockPcm::DispatchSockets(MultiSocketMonitor &m,
 | 
			
		||||
					 snd_strerror(-err));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::chrono::steady_clock::duration
 | 
			
		||||
Event::Duration
 | 
			
		||||
AlsaNonBlockMixer::PrepareSockets(MultiSocketMonitor &m, snd_mixer_t *mixer) noexcept
 | 
			
		||||
{
 | 
			
		||||
	int count = snd_mixer_poll_descriptors_count(mixer);
 | 
			
		||||
	if (count <= 0) {
 | 
			
		||||
		m.ClearSocketList();
 | 
			
		||||
		return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
		return Event::Duration(-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	struct pollfd *pfds = pfd_buffer.Get(count);
 | 
			
		||||
@@ -91,7 +91,7 @@ AlsaNonBlockMixer::PrepareSockets(MultiSocketMonitor &m, snd_mixer_t *mixer) noe
 | 
			
		||||
		count = 0;
 | 
			
		||||
 | 
			
		||||
	m.ReplaceSocketList(pfds, count);
 | 
			
		||||
	return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
	return Event::Duration(-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
@@ -20,12 +20,11 @@
 | 
			
		||||
#ifndef MPD_ALSA_NON_BLOCK_HXX
 | 
			
		||||
#define MPD_ALSA_NON_BLOCK_HXX
 | 
			
		||||
 | 
			
		||||
#include "event/Chrono.hxx"
 | 
			
		||||
#include "util/ReusableArray.hxx"
 | 
			
		||||
 | 
			
		||||
#include <alsa/asoundlib.h>
 | 
			
		||||
 | 
			
		||||
#include <chrono>
 | 
			
		||||
 | 
			
		||||
class MultiSocketMonitor;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -39,7 +38,7 @@ public:
 | 
			
		||||
	/**
 | 
			
		||||
	 * Throws on error.
 | 
			
		||||
	 */
 | 
			
		||||
	std::chrono::steady_clock::duration PrepareSockets(MultiSocketMonitor &m,
 | 
			
		||||
	Event::Duration PrepareSockets(MultiSocketMonitor &m,
 | 
			
		||||
				       snd_pcm_t *pcm);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -59,7 +58,7 @@ class AlsaNonBlockMixer {
 | 
			
		||||
	ReusableArray<pollfd> pfd_buffer;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	std::chrono::steady_clock::duration PrepareSockets(MultiSocketMonitor &m,
 | 
			
		||||
	Event::Duration PrepareSockets(MultiSocketMonitor &m,
 | 
			
		||||
				       snd_mixer_t *mixer) noexcept;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ extern "C" {
 | 
			
		||||
#include <poll.h> /* for POLLIN, POLLOUT */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static constexpr std::chrono::steady_clock::duration NFS_MOUNT_TIMEOUT =
 | 
			
		||||
static constexpr Event::Duration NFS_MOUNT_TIMEOUT =
 | 
			
		||||
	std::chrono::minutes(1);
 | 
			
		||||
 | 
			
		||||
inline void
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ namespace Systemd {
 | 
			
		||||
class Watchdog {
 | 
			
		||||
	TimerEvent timer;
 | 
			
		||||
 | 
			
		||||
	std::chrono::steady_clock::duration interval;
 | 
			
		||||
	Event::Duration interval;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	explicit Watchdog(EventLoop &_loop) noexcept;
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ public:
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	std::chrono::steady_clock::duration PrepareSockets() noexcept override;
 | 
			
		||||
	Event::Duration PrepareSockets() noexcept override;
 | 
			
		||||
	void DispatchSockets() noexcept override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -99,12 +99,12 @@ public:
 | 
			
		||||
 | 
			
		||||
static constexpr Domain alsa_mixer_domain("alsa_mixer");
 | 
			
		||||
 | 
			
		||||
std::chrono::steady_clock::duration
 | 
			
		||||
Event::Duration
 | 
			
		||||
AlsaMixerMonitor::PrepareSockets() noexcept
 | 
			
		||||
{
 | 
			
		||||
	if (mixer == nullptr) {
 | 
			
		||||
		ClearSocketList();
 | 
			
		||||
		return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
		return Event::Duration(-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return non_block.PrepareSockets(*this, mixer);
 | 
			
		||||
 
 | 
			
		||||
@@ -119,7 +119,7 @@ class AlsaOutput final
 | 
			
		||||
	 */
 | 
			
		||||
	snd_pcm_uframes_t period_frames;
 | 
			
		||||
 | 
			
		||||
	std::chrono::steady_clock::duration effective_period_duration;
 | 
			
		||||
	Event::Duration effective_period_duration;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * If snd_pcm_avail() goes above this value and no more data
 | 
			
		||||
@@ -398,7 +398,7 @@ private:
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* virtual methods from class MultiSocketMonitor */
 | 
			
		||||
	std::chrono::steady_clock::duration PrepareSockets() noexcept override;
 | 
			
		||||
	Event::Duration PrepareSockets() noexcept override;
 | 
			
		||||
	void DispatchSockets() noexcept override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -1052,12 +1052,12 @@ AlsaOutput::Play(const void *chunk, size_t size)
 | 
			
		||||
	return size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::chrono::steady_clock::duration
 | 
			
		||||
Event::Duration
 | 
			
		||||
AlsaOutput::PrepareSockets() noexcept
 | 
			
		||||
{
 | 
			
		||||
	if (!LockIsActiveAndNotWaiting()) {
 | 
			
		||||
		ClearSocketList();
 | 
			
		||||
		return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
		return Event::Duration(-1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	try {
 | 
			
		||||
@@ -1065,7 +1065,7 @@ AlsaOutput::PrepareSockets() noexcept
 | 
			
		||||
	} catch (...) {
 | 
			
		||||
		ClearSocketList();
 | 
			
		||||
		LockCaughtError();
 | 
			
		||||
		return std::chrono::steady_clock::duration(-1);
 | 
			
		||||
		return Event::Duration(-1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user