event/MultiSocketMonitor: add method Reset()
This commit is contained in:
parent
4b30ef1cf2
commit
eda06993f8
|
@ -31,9 +31,15 @@ MultiSocketMonitor::MultiSocketMonitor(EventLoop &_loop)
|
||||||
:IdleMonitor(_loop), TimeoutMonitor(_loop) {
|
:IdleMonitor(_loop), TimeoutMonitor(_loop) {
|
||||||
}
|
}
|
||||||
|
|
||||||
MultiSocketMonitor::~MultiSocketMonitor()
|
void
|
||||||
|
MultiSocketMonitor::Reset()
|
||||||
{
|
{
|
||||||
// TODO
|
assert(GetEventLoop().IsInsideOrNull());
|
||||||
|
|
||||||
|
fds.clear();
|
||||||
|
IdleMonitor::Cancel();
|
||||||
|
TimeoutMonitor::Cancel();
|
||||||
|
ready = refresh = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -119,11 +119,26 @@ public:
|
||||||
static constexpr unsigned HANGUP = SocketMonitor::HANGUP;
|
static constexpr unsigned HANGUP = SocketMonitor::HANGUP;
|
||||||
|
|
||||||
MultiSocketMonitor(EventLoop &_loop);
|
MultiSocketMonitor(EventLoop &_loop);
|
||||||
~MultiSocketMonitor();
|
|
||||||
|
|
||||||
using IdleMonitor::GetEventLoop;
|
using IdleMonitor::GetEventLoop;
|
||||||
|
|
||||||
public:
|
/**
|
||||||
|
* Clear the socket list and disable all #EventLoop
|
||||||
|
* registrations. Run this in the #EventLoop thread before
|
||||||
|
* destroying this object.
|
||||||
|
*
|
||||||
|
* Later, this object can be reused and reactivated by calling
|
||||||
|
* InvalidateSockets().
|
||||||
|
*
|
||||||
|
* Note that this class doesn't have a destructor which calls
|
||||||
|
* this method, because this would be racy and thus pointless:
|
||||||
|
* at the time ~MultiSocketMonitor() is called, our virtual
|
||||||
|
* methods have been morphed to be pure again, and in the
|
||||||
|
* meantime the #EventLoop thread could invoke those pure
|
||||||
|
* methods.
|
||||||
|
*/
|
||||||
|
void Reset();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.
|
||||||
|
|
|
@ -98,12 +98,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
~AlsaInputStream() {
|
~AlsaInputStream() {
|
||||||
/* ClearSocketList must be called from within the
|
|
||||||
IOThread; if we don't do it manually here, the
|
|
||||||
~MultiSocketMonitor() will do it in the current
|
|
||||||
thread */
|
|
||||||
BlockingCall(MultiSocketMonitor::GetEventLoop(), [this](){
|
BlockingCall(MultiSocketMonitor::GetEventLoop(), [this](){
|
||||||
ClearSocketList();
|
MultiSocketMonitor::Reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
snd_pcm_close(capture_handle);
|
snd_pcm_close(capture_handle);
|
||||||
|
|
Loading…
Reference in New Issue