mirror of https://github.com/aria2/aria2
Use std::set for socketEntries_ and nameResolverEntries_ in PortEventPoll
parent
ae393329f7
commit
2b3469dad9
|
@ -139,9 +139,8 @@ void PortEventPoll::poll(const struct timeval& tv)
|
||||||
// own timeout and ares may create new sockets or closes socket in
|
// own timeout and ares may create new sockets or closes socket in
|
||||||
// their API. So we call ares_process_fd for all ares_channel and
|
// their API. So we call ares_process_fd for all ares_channel and
|
||||||
// re-register their sockets.
|
// re-register their sockets.
|
||||||
for(std::deque<SharedHandle<KAsyncNameResolverEntry> >::iterator i =
|
for(KAsyncNameResolverEntrySet::iterator i = nameResolverEntries_.begin(),
|
||||||
nameResolverEntries_.begin(), eoi = nameResolverEntries_.end();
|
eoi = nameResolverEntries_.end(); i != eoi; ++i) {
|
||||||
i != eoi; ++i) {
|
|
||||||
(*i)->processTimeout();
|
(*i)->processTimeout();
|
||||||
(*i)->removeSocketEvents(this);
|
(*i)->removeSocketEvents(this);
|
||||||
(*i)->addSocketEvents(this);
|
(*i)->addSocketEvents(this);
|
||||||
|
@ -176,9 +175,7 @@ bool PortEventPoll::addEvents(sock_t socket,
|
||||||
const PortEventPoll::KEvent& event)
|
const PortEventPoll::KEvent& event)
|
||||||
{
|
{
|
||||||
SharedHandle<KSocketEntry> socketEntry(new KSocketEntry(socket));
|
SharedHandle<KSocketEntry> socketEntry(new KSocketEntry(socket));
|
||||||
std::deque<SharedHandle<KSocketEntry> >::iterator i =
|
KSocketEntrySet::iterator i = socketEntries_.lower_bound(socketEntry);
|
||||||
std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry,
|
|
||||||
DerefLess<SharedHandle<KSocketEntry> >());
|
|
||||||
int r = 0;
|
int r = 0;
|
||||||
int errNum = 0;
|
int errNum = 0;
|
||||||
if(i != socketEntries_.end() && *(*i) == *socketEntry) {
|
if(i != socketEntries_.end() && *(*i) == *socketEntry) {
|
||||||
|
@ -228,10 +225,11 @@ bool PortEventPoll::deleteEvents(sock_t socket,
|
||||||
const PortEventPoll::KEvent& event)
|
const PortEventPoll::KEvent& event)
|
||||||
{
|
{
|
||||||
SharedHandle<KSocketEntry> socketEntry(new KSocketEntry(socket));
|
SharedHandle<KSocketEntry> socketEntry(new KSocketEntry(socket));
|
||||||
std::deque<SharedHandle<KSocketEntry> >::iterator i =
|
KSocketEntrySet::iterator i = socketEntries_.find(socketEntry);
|
||||||
std::lower_bound(socketEntries_.begin(), socketEntries_.end(), socketEntry,
|
if(i == socketEntries_.end()) {
|
||||||
DerefLess<SharedHandle<KSocketEntry> >());
|
A2_LOG_DEBUG(fmt("Socket %d is not found in SocketEntries.", socket));
|
||||||
if(i != socketEntries_.end() && *(*i) == *socketEntry) {
|
return false;
|
||||||
|
} else {
|
||||||
event.removeSelf(*i);
|
event.removeSelf(*i);
|
||||||
int r = 0;
|
int r = 0;
|
||||||
int errNum = 0;
|
int errNum = 0;
|
||||||
|
@ -252,9 +250,6 @@ bool PortEventPoll::deleteEvents(sock_t socket,
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
A2_LOG_DEBUG(fmt("Socket %d is not found in SocketEntries.", socket));
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,11 +274,9 @@ bool PortEventPoll::addNameResolver
|
||||||
{
|
{
|
||||||
SharedHandle<KAsyncNameResolverEntry> entry
|
SharedHandle<KAsyncNameResolverEntry> entry
|
||||||
(new KAsyncNameResolverEntry(resolver, command));
|
(new KAsyncNameResolverEntry(resolver, command));
|
||||||
std::deque<SharedHandle<KAsyncNameResolverEntry> >::iterator itr =
|
KAsyncNameResolverEntrySet::iterator itr = nameResolverEntries_.find(entry);
|
||||||
std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(),
|
|
||||||
derefEqual(entry));
|
|
||||||
if(itr == nameResolverEntries_.end()) {
|
if(itr == nameResolverEntries_.end()) {
|
||||||
nameResolverEntries_.push_back(entry);
|
nameResolverEntries_.insert(entry);
|
||||||
entry->addSocketEvents(this);
|
entry->addSocketEvents(this);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -296,9 +289,7 @@ bool PortEventPoll::deleteNameResolver
|
||||||
{
|
{
|
||||||
SharedHandle<KAsyncNameResolverEntry> entry
|
SharedHandle<KAsyncNameResolverEntry> entry
|
||||||
(new KAsyncNameResolverEntry(resolver, command));
|
(new KAsyncNameResolverEntry(resolver, command));
|
||||||
std::deque<SharedHandle<KAsyncNameResolverEntry> >::iterator itr =
|
KAsyncNameResolverEntrySet::iterator itr = nameResolverEntries_.find(entry);
|
||||||
std::find_if(nameResolverEntries_.begin(), nameResolverEntries_.end(),
|
|
||||||
derefEqual(entry));
|
|
||||||
if(itr == nameResolverEntries_.end()) {
|
if(itr == nameResolverEntries_.end()) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -41,9 +41,10 @@
|
||||||
# include <port.h>
|
# include <port.h>
|
||||||
#endif // HAVE_PORT_H
|
#endif // HAVE_PORT_H
|
||||||
|
|
||||||
#include <deque>
|
#include <set>
|
||||||
|
|
||||||
#include "Event.h"
|
#include "Event.h"
|
||||||
|
#include "a2functional.h"
|
||||||
#ifdef ENABLE_ASYNC_DNS
|
#ifdef ENABLE_ASYNC_DNS
|
||||||
# include "AsyncNameResolver.h"
|
# include "AsyncNameResolver.h"
|
||||||
#endif // ENABLE_ASYNC_DNS
|
#endif // ENABLE_ASYNC_DNS
|
||||||
|
@ -76,9 +77,14 @@ private:
|
||||||
friend int accumulateEvent(int events, const KEvent& event);
|
friend int accumulateEvent(int events, const KEvent& event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::deque<SharedHandle<KSocketEntry> > socketEntries_;
|
typedef std::set<SharedHandle<KSocketEntry>,
|
||||||
|
DerefLess<SharedHandle<KSocketEntry> > > KSocketEntrySet;
|
||||||
|
KSocketEntrySet socketEntries_;
|
||||||
#ifdef ENABLE_ASYNC_DNS
|
#ifdef ENABLE_ASYNC_DNS
|
||||||
std::deque<SharedHandle<KAsyncNameResolverEntry> > nameResolverEntries_;
|
typedef std::set<SharedHandle<KAsyncNameResolverEntry>,
|
||||||
|
DerefLess<SharedHandle<KAsyncNameResolverEntry> > >
|
||||||
|
KAsyncNameResolverEntrySet;
|
||||||
|
KAsyncNameResolverEntrySet nameResolverEntries_;
|
||||||
#endif // ENABLE_ASYNC_DNS
|
#endif // ENABLE_ASYNC_DNS
|
||||||
|
|
||||||
int port_;
|
int port_;
|
||||||
|
|
Loading…
Reference in New Issue