If file descriptors get added and removed in rapid succession, the active
watcher thread might not take notice of it and continues running. However, add()
spawns a watcher thread whenever a file descriptor is added to an empty set.
This could result in multiple watcher threads, which is fixed by a proper
check for running watchers.
FD_ZERO(&ex);
this->mutex->lock(this->mutex);
+
if (this->fds->get_count(this->fds) == 0)
{
+ this->running = FALSE;
this->mutex->unlock(this->mutex);
return JOB_REQUEUE_NONE;
}
this->mutex->lock(this->mutex);
this->fds->insert_last(this->fds, entry);
- if (this->fds->get_count(this->fds) == 1)
+ if (!this->running)
{
this->running = TRUE;
lib->processor->queue_job(lib->processor,