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) {
|
||||
}
|
||||
|
||||
MultiSocketMonitor::~MultiSocketMonitor()
|
||||
void
|
||||
MultiSocketMonitor::Reset()
|
||||
{
|
||||
// TODO
|
||||
assert(GetEventLoop().IsInsideOrNull());
|
||||
|
||||
fds.clear();
|
||||
IdleMonitor::Cancel();
|
||||
TimeoutMonitor::Cancel();
|
||||
ready = refresh = false;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -119,11 +119,26 @@ public:
|
||||
static constexpr unsigned HANGUP = SocketMonitor::HANGUP;
|
||||
|
||||
MultiSocketMonitor(EventLoop &_loop);
|
||||
~MultiSocketMonitor();
|
||||
|
||||
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
|
||||
* scheduled which will then update the list.
|
||||
|
@ -98,12 +98,8 @@ public:
|
||||
}
|
||||
|
||||
~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](){
|
||||
ClearSocketList();
|
||||
MultiSocketMonitor::Reset();
|
||||
});
|
||||
|
||||
snd_pcm_close(capture_handle);
|
||||
|
Loading…
Reference in New Issue
Block a user