diff --git a/src/IO/http.cc b/src/IO/http.cc index 8acc667..5652fd1 100644 --- a/src/IO/http.cc +++ b/src/IO/http.cc @@ -88,7 +88,7 @@ struct Server_t { int active_conns; int running_the_queue; - Dlist *queue; + std::vector< SocketData_t * > queue; }; struct FdMapEntry_t { @@ -241,7 +241,7 @@ void a_Http_connect_done(int fd, bool success) static void Http_socket_activate(Server_t *srv, SocketData_t *sd) { - dList_remove(srv->queue, sd); + srv->queue.erase( std::find( begin( srv->queue ), end( srv->queue ), sd ) ); sd->flags &= ~HTTP_SOCKET_QUEUED; srv->active_conns++; sd->connected_to = srv->host.value().data(); @@ -255,14 +255,14 @@ static void Http_connect_queued_sockets(Server_t *srv) srv->running_the_queue++; for (i = 0; - (i < dList_length(srv->queue) && + (i < srv->queue.size() && srv->active_conns < prefs.http_max_conns); i++) { - sd = reinterpret_cast< SocketData_t * >( dList_nth_data(srv->queue, i) ); + sd = srv->queue.at( i ); if (sd->flags & HTTP_SOCKET_TO_BE_FREED) { - dList_remove(srv->queue, sd); - dFree(sd); + srv->queue.erase( std::find( begin( srv->queue ), end( srv->queue ), sd ) ); + delete sd; i--; } else { int connect_ready = TLS_CONNECT_READY; @@ -859,10 +859,10 @@ static void Http_socket_reuse(int SKey) Server_t *srv = Http_server_get(old_sd->connected_to, old_sd->connect_port, (old_sd->flags & HTTP_SOCKET_TLS)); - int i, n = dList_length(srv->queue); + int i, n = srv->queue.size(); for (i = 0; i < n; i++) { - new_sd = reinterpret_cast< SocketData_t * >( dList_nth_data(srv->queue, i) ); + new_sd = srv->queue.at( i ); if (!(new_sd->flags & HTTP_SOCKET_TO_BE_FREED) && Http_socket_reuse_compatible(old_sd, new_sd)) { @@ -1052,18 +1052,18 @@ static void Http_socket_enqueue(Server_t *srv, SocketData_t* sock) sock->flags |= HTTP_SOCKET_QUEUED; if ((sock->web->flags & WEB_Image) == 0) { - int i, n = dList_length(srv->queue); + int i, n = srv->queue.size(); for (i = 0; i < n; i++) { - SocketData_t *curr = reinterpret_cast< SocketData_t * >( dList_nth_data(srv->queue, i) ); + SocketData_t *curr = srv->queue.at( i ); if (a_Web_valid(curr->web) && (curr->web->flags & WEB_Image)) { - dList_insert_pos(srv->queue, sock, i); + srv->queue.insert( i + begin( srv->queue ), sock ); return; } } } - dList_append(srv->queue, sock); + srv->queue.push_back( sock ); } static Server_t *Http_server_get(const std::string host, uint_t port, bool https) @@ -1077,7 +1077,6 @@ static Server_t *Http_server_get(const std::string host, uint_t port, bool https } auto srv = std::make_unique< Server_t >(); - srv->queue = dList_new(10); srv->running_the_queue = 0; srv->host = host; srv->port = port; @@ -1091,11 +1090,10 @@ static void Http_server_remove(Server_t *srv) { SocketData_t *sd; - while ((sd = reinterpret_cast< SocketData_t * >( dList_nth_data(srv->queue, 0) ))) { - dList_remove_fast(srv->queue, sd); + while (not srv->queue.empty() and (sd = srv->queue.at( 0 ))) { + srv->queue.erase( begin( srv->queue ) ); delete sd; } - dList_free(srv->queue); servers.erase( std::find( begin( servers ), end( servers ), srv ) ); delete srv; } @@ -1107,8 +1105,8 @@ static void Http_servers_remove_all(void) while (not servers.empty()) { srv = servers.at( 0 ); - while ((sd = reinterpret_cast< SocketData_t * >( dList_nth_data(srv->queue, 0) ))) { - dList_remove(srv->queue, sd); + while (not srv->queue.empty() and (sd = srv->queue.at( 0 ))) { + srv->queue.erase( begin( srv->queue ) ); delete sd; } Http_server_remove(srv);