[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [libmicrohttpd] 05/05: Walk double-linked lists from 'tail'
From: |
gnunet |
Subject: |
[GNUnet-SVN] [libmicrohttpd] 05/05: Walk double-linked lists from 'tail' to 'head'. Walking connection as "First in - First Served" gives more uniform processing time. |
Date: |
Tue, 28 Feb 2017 17:52:25 +0100 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd.
commit 78295468b0956b92f49aaeba6bc76cc323cb063a
Author: Evgeny Grin (Karlson2k) <address@hidden>
AuthorDate: Tue Feb 28 19:06:34 2017 +0300
Walk double-linked lists from 'tail' to 'head'.
Walking connection as "First in - First Served" gives more uniform
processing time.
---
src/microhttpd/daemon.c | 78 ++++++++++++++++++++++++-------------------------
1 file changed, 39 insertions(+), 39 deletions(-)
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index dafc75ef..2e3d8833 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -819,9 +819,10 @@ MHD_get_fdset2 (struct MHD_Daemon *daemon,
fd_setsize)) )
result = MHD_NO;
- for (pos = daemon->connections_head; NULL != pos; pos = posn)
+ /* Start from oldest connections. Make sense for W32 FDSETs. */
+ for (pos = daemon->connections_tail; NULL != pos; pos = posn)
{
- posn = pos->next;
+ posn = pos->prev;
switch (pos->event_loop_info)
{
@@ -856,7 +857,7 @@ MHD_get_fdset2 (struct MHD_Daemon *daemon,
{
struct MHD_UpgradeResponseHandle *urh;
- for (urh = daemon->urh_head; NULL != urh; urh = urh->next)
+ for (urh = daemon->urh_tail; NULL != urh; urh = urh->prev)
{
if (MHD_NO ==
urh_to_fdset (urh,
@@ -2547,26 +2548,26 @@ static int
resume_suspended_connections (struct MHD_Daemon *daemon)
{
struct MHD_Connection *pos;
- struct MHD_Connection *next = NULL;
+ struct MHD_Connection *prev = NULL;
int ret;
ret = MHD_NO;
MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex);
if (daemon->resuming)
- next = daemon->suspended_connections_head;
+ prev = daemon->suspended_connections_tail;
EXTRA_CHECK(NULL != next);
daemon->resuming = false;
- while (NULL != (pos = next))
+ while (NULL != (pos = prev))
{
#ifdef UPGRADE_SUPPORT
struct MHD_UpgradeResponseHandle * const urh = pos->urh;
#else /* ! UPGRADE_SUPPORT */
static const void * const urh = NULL;
#endif /* ! UPGRADE_SUPPORT */
- next = pos->next;
+ prev = pos->prev;
if ( (! pos->resuming)
#ifdef UPGRADE_SUPPORT
|| ( (NULL != urh) &&
@@ -2855,7 +2856,7 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
struct MHD_Connection *pos;
MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex);
- while (NULL != (pos = daemon->cleanup_head))
+ while (NULL != (pos = daemon->cleanup_tail))
{
DLL_remove (daemon->cleanup_head,
daemon->cleanup_tail,
@@ -2985,7 +2986,7 @@ MHD_get_timeout (struct MHD_Daemon *daemon,
have_timeout = false;;
earliest_deadline = 0; /* avoid compiler warnings */
- for (pos = daemon->manual_timeout_head; NULL != pos; pos = pos->nextX)
+ for (pos = daemon->manual_timeout_tail; NULL != pos; pos = pos->prevX)
{
if (0 != pos->connection_timeout)
{
@@ -3050,7 +3051,7 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
{
MHD_socket ds;
struct MHD_Connection *pos;
- struct MHD_Connection *next;
+ struct MHD_Connection *prev;
#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
struct MHD_UpgradeResponseHandle *urh;
struct MHD_UpgradeResponseHandle *urhn;
@@ -3099,10 +3100,10 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
if (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
{
/* do not have a thread per connection, process all connections now */
- next = daemon->connections_head;
- while (NULL != (pos = next))
+ prev = daemon->connections_tail;
+ while (NULL != (pos = prev))
{
- next = pos->next;
+ prev = pos->next;
ds = pos->socket_fd;
if (MHD_INVALID_SOCKET == ds)
continue;
@@ -3118,9 +3119,9 @@ MHD_run_from_select (struct MHD_Daemon *daemon,
#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
/* handle upgraded HTTPS connections */
- for (urh = daemon->urh_head; NULL != urh; urh = urhn)
+ for (urh = daemon->urh_tail; NULL != urh; urh = urhn)
{
- urhn = urh->next;
+ urhn = urh->prev;
/* update urh state based on select() output */
urh_from_fdset (urh,
read_fd_set,
@@ -3325,7 +3326,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
{
unsigned int num_connections;
struct MHD_Connection *pos;
- struct MHD_Connection *next;
+ struct MHD_Connection *prev;
#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
struct MHD_UpgradeResponseHandle *urh;
struct MHD_UpgradeResponseHandle *urhn;
@@ -3396,7 +3397,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
timeout = (ltimeout > INT_MAX) ? INT_MAX : (int) ltimeout;
i = 0;
- for (pos = daemon->connections_head; NULL != pos; pos = pos->next)
+ for (pos = daemon->connections_tail; NULL != pos; pos = pos->prev)
{
p[poll_server+i].fd = pos->socket_fd;
switch (pos->event_loop_info)
@@ -3417,7 +3418,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
i++;
}
#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
- for (urh = daemon->urh_head; NULL != urh; urh = urh->next)
+ for (urh = daemon->urh_tail; NULL != urh; urh = urh->prev)
{
p[poll_server+i].fd = urh->connection->socket_fd;
if (urh->in_buffer_used < urh->in_buffer_size)
@@ -3474,10 +3475,10 @@ MHD_poll_all (struct MHD_Daemon *daemon,
return MHD_NO;
}
i = 0;
- next = daemon->connections_head;
- while (NULL != (pos = next))
+ prev = daemon->connections_tail;
+ while (NULL != (pos = prev))
{
- next = pos->next;
+ prev = pos->prev;
/* first, sanity checks */
if (i >= num_connections)
break; /* connection list changed somehow, retry later ... */
@@ -3490,14 +3491,14 @@ MHD_poll_all (struct MHD_Daemon *daemon,
i++;
}
#if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
- for (urh = daemon->urh_head; NULL != urh; urh = urhn)
+ for (urh = daemon->urh_tail; NULL != urh; urh = urhn)
{
if (i >= num_connections)
break; /* connection list changed somehow, retry later ... */
/* Get next connection here as connection can be removed
* from 'daemon->urh_head' list. */
- urhn = urh->next;
+ urhn = urh->prev;
/* Check for fd mismatch. FIXME: required for safety? */
if (p[poll_server+i].fd == urh->connection->socket_fd)
{
@@ -3755,7 +3756,6 @@ MHD_epoll (struct MHD_Daemon *daemon,
static const char *upgrade_marker = "upgrade_ptr";
#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT */
struct MHD_Connection *pos;
- struct MHD_Connection *next;
struct MHD_Connection *prev;
struct epoll_event events[MAX_EVENTS];
struct epoll_event event;
@@ -4018,20 +4018,20 @@ MHD_epoll (struct MHD_Daemon *daemon,
Connections with custom timeouts must all be looked at, as we
do not bother to sort that (presumably very short) list. */
- next = daemon->manual_timeout_head;
- while (NULL != (pos = next))
+ prev = daemon->manual_timeout_tail;
+ while (NULL != (pos = prev))
{
- next = pos->nextX;
+ prev = pos->prevX;
pos->idle_handler (pos);
}
/* Connections with the default timeout are sorted by prepending
them to the head of the list whenever we touch the connection;
thus it suffices to iterate from the tail until the first
connection is NOT timed out */
- next = daemon->normal_timeout_tail;
- while (NULL != (pos = next))
+ prev = daemon->normal_timeout_tail;
+ while (NULL != (pos = prev))
{
- next = pos->prevX;
+ prev = pos->prevX;
pos->idle_handler (pos);
if (MHD_CONNECTION_CLOSED != pos->state)
break; /* sorted by timeout, no need to visit the rest! */
@@ -5657,9 +5657,9 @@ close_all_connections (struct MHD_Daemon *daemon)
/* give upgraded HTTPS connections a chance to finish */
/* 'daemon->urh_head' is not used in thread-per-connection mode. */
- for (urh = daemon->urh_head; NULL != urh; urh = urhn)
+ for (urh = daemon->urh_tail; NULL != urh; urh = urhn)
{
- urhn = urh->next;
+ urhn = urh->prev;
/* call generic forwarding function for passing data
with chance to detect that application is done. */
process_urh (urh);
@@ -5687,7 +5687,7 @@ close_all_connections (struct MHD_Daemon *daemon)
{
struct MHD_Connection * susp;
- susp = daemon->suspended_connections_head;
+ susp = daemon->suspended_connections_tail;
while (NULL != susp)
{
if (NULL == susp->urh) /* "Upgraded" connection? */
@@ -5716,14 +5716,14 @@ close_all_connections (struct MHD_Daemon *daemon)
susp->resuming = true;
daemon->resuming = true;
}
- susp = susp->next;
+ susp = susp->prev;
}
}
else /* This 'else' is combined with next 'if' */
#endif /* UPGRADE_SUPPORT */
if (NULL != daemon->suspended_connections_head)
MHD_PANIC (_("MHD_stop_daemon() called while we have suspended
connections.\n"));
- for (pos = daemon->connections_head; NULL != pos; pos = pos->next)
+ for (pos = daemon->connections_tail; NULL != pos; pos = pos->prev)
{
shutdown (pos->socket_fd,
SHUT_RDWR);
@@ -5738,7 +5738,7 @@ close_all_connections (struct MHD_Daemon *daemon)
/* now, collect per-connection threads */
if (used_thr_p_c)
{
- pos = daemon->connections_head;
+ pos = daemon->connections_tail;
while (NULL != pos)
{
if (! pos->thread_joined)
@@ -5750,10 +5750,10 @@ close_all_connections (struct MHD_Daemon *daemon)
pos->thread_joined = true;
/* The thread may have concurrently modified the DLL,
need to restart from the beginning */
- pos = daemon->connections_head;
+ pos = daemon->connections_tail;
continue;
}
- pos = pos->next;
+ pos = pos->prev;
}
}
MHD_mutex_unlock_chk_ (&daemon->cleanup_connection_mutex);
@@ -5771,7 +5771,7 @@ close_all_connections (struct MHD_Daemon *daemon)
#endif /* UPGRADE_SUPPORT */
/* now that we're alone, move everyone to cleanup */
- while (NULL != (pos = daemon->connections_head))
+ while (NULL != (pos = daemon->connections_tail))
{
if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) &&
(! pos->thread_joined) )
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [libmicrohttpd] branch master updated (a44c8f33 -> 78295468), gnunet, 2017/02/28
- [GNUnet-SVN] [libmicrohttpd] 03/05: MHD_get_timeout(): fixed return of latest timeout instead of earliest., gnunet, 2017/02/28
- [GNUnet-SVN] [libmicrohttpd] 04/05: MHD_get_timeout(): one more 'int' -> 'bool' replacement., gnunet, 2017/02/28
- [GNUnet-SVN] [libmicrohttpd] 02/05: MHD_get_timeout(): fixed incorrect timeout for TLS connections. If connection is in "MHD_EVENT_LOOP_INFO_WRITE" mode, any pending incoming data should not result in zero timeout. Already handled properly by 'data_already_pending'. Note: old check was incorrect even for "MHD_EVENT_LOOP_INFO_READ" connections as only first connection in "normal timeout" list was checked., gnunet, 2017/02/28
- [GNUnet-SVN] [libmicrohttpd] 05/05: Walk double-linked lists from 'tail' to 'head'. Walking connection as "First in - First Served" gives more uniform processing time.,
gnunet <=
- [GNUnet-SVN] [libmicrohttpd] 01/05: configure.ac: skip large GnuTLS and gcrypt tests if HTTPS is disabled, gnunet, 2017/02/28