deps: update nghttp2 to 1.37.0

PR-URL: https://github.com/nodejs/node/pull/26990
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
gengjiawen 2019-03-30 00:22:54 +08:00 committed by ZYSzys
parent 198d7a47c2
commit 5c2ee4ee8d
7 changed files with 43 additions and 38 deletions

View File

@ -38,6 +38,7 @@ if(WIN32)
endif() endif()
# Public shared library # Public shared library
if(ENABLE_SHARED_LIB)
add_library(nghttp2 SHARED ${NGHTTP2_SOURCES} ${NGHTTP2_RES}) add_library(nghttp2 SHARED ${NGHTTP2_SOURCES} ${NGHTTP2_RES})
set_target_properties(nghttp2 PROPERTIES set_target_properties(nghttp2 PROPERTIES
COMPILE_FLAGS "${WARNCFLAGS}" COMPILE_FLAGS "${WARNCFLAGS}"
@ -49,6 +50,12 @@ target_include_directories(nghttp2 INTERFACE
"${CMAKE_CURRENT_SOURCE_DIR}/includes" "${CMAKE_CURRENT_SOURCE_DIR}/includes"
) )
install(TARGETS nghttp2
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
if(HAVE_CUNIT OR ENABLE_STATIC_LIB) if(HAVE_CUNIT OR ENABLE_STATIC_LIB)
# Static library (for unittests because of symbol visibility) # Static library (for unittests because of symbol visibility)
add_library(nghttp2_static STATIC ${NGHTTP2_SOURCES}) add_library(nghttp2_static STATIC ${NGHTTP2_SOURCES})
@ -64,8 +71,6 @@ if(HAVE_CUNIT OR ENABLE_STATIC_LIB)
endif() endif()
endif() endif()
install(TARGETS nghttp2
DESTINATION "${CMAKE_INSTALL_LIBDIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libnghttp2.pc" install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libnghttp2.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")

View File

@ -31,6 +31,11 @@
# define WIN32 # define WIN32
#endif #endif
/* Compatibility for non-Clang compilers */
#ifndef __has_declspec_attribute
# define __has_declspec_attribute(x) 0
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -51,7 +56,8 @@ extern "C" {
#ifdef NGHTTP2_STATICLIB #ifdef NGHTTP2_STATICLIB
# define NGHTTP2_EXTERN # define NGHTTP2_EXTERN
#elif defined(WIN32) #elif defined(WIN32) || (__has_declspec_attribute(dllexport) && \
__has_declspec_attribute(dllimport))
# ifdef BUILDING_NGHTTP2 # ifdef BUILDING_NGHTTP2
# define NGHTTP2_EXTERN __declspec(dllexport) # define NGHTTP2_EXTERN __declspec(dllexport)
# else /* !BUILDING_NGHTTP2 */ # else /* !BUILDING_NGHTTP2 */

View File

@ -29,7 +29,7 @@
* @macro * @macro
* Version number of the nghttp2 library release * Version number of the nghttp2 library release
*/ */
#define NGHTTP2_VERSION "1.34.0" #define NGHTTP2_VERSION "1.37.0"
/** /**
* @macro * @macro
@ -37,6 +37,6 @@
* release. This is a 24 bit number with 8 bits for major number, 8 bits * release. This is a 24 bit number with 8 bits for major number, 8 bits
* for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203. * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
*/ */
#define NGHTTP2_VERSION_NUM 0x012200 #define NGHTTP2_VERSION_NUM 0x012500
#endif /* NGHTTP2VER_H */ #endif /* NGHTTP2VER_H */

View File

@ -1390,7 +1390,7 @@ static int deflate_nv(nghttp2_hd_deflater *deflater, nghttp2_bufs *bufs,
if (indexing_mode == NGHTTP2_HD_WITH_INDEXING) { if (indexing_mode == NGHTTP2_HD_WITH_INDEXING) {
nghttp2_hd_nv hd_nv; nghttp2_hd_nv hd_nv;
if (idx != -1 && idx < (ssize_t)NGHTTP2_STATIC_TABLE_LENGTH) { if (idx != -1) {
hd_nv.name = nghttp2_hd_table_get(&deflater->ctx, (size_t)idx).name; hd_nv.name = nghttp2_hd_table_get(&deflater->ctx, (size_t)idx).name;
nghttp2_rcbuf_incref(hd_nv.name); nghttp2_rcbuf_incref(hd_nv.name);
} else { } else {

View File

@ -209,9 +209,6 @@ struct nghttp2_session {
nghttp2_session_callbacks callbacks; nghttp2_session_callbacks callbacks;
/* Memory allocator */ /* Memory allocator */
nghttp2_mem mem; nghttp2_mem mem;
/* Base value when we schedule next DATA frame write. This is
updated when one frame was written. */
uint64_t last_cycle;
void *user_data; void *user_data;
/* Points to the latest incoming closed stream. NULL if there is no /* Points to the latest incoming closed stream. NULL if there is no
closed stream. Only used when session is initialized as closed stream. Only used when session is initialized as

View File

@ -30,6 +30,7 @@
#include "nghttp2_session.h" #include "nghttp2_session.h"
#include "nghttp2_helper.h" #include "nghttp2_helper.h"
#include "nghttp2_debug.h" #include "nghttp2_debug.h"
#include "nghttp2_frame.h"
/* Maximum distance between any two stream's cycle in the same /* Maximum distance between any two stream's cycle in the same
prirority queue. Imagine stream A's cycle is A, and stream B's prirority queue. Imagine stream A's cycle is A, and stream B's
@ -40,7 +41,8 @@
words, B is really greater than or equal to A. Otherwise, A is a words, B is really greater than or equal to A. Otherwise, A is a
result of overflow, and it is actually A > B if we consider that result of overflow, and it is actually A > B if we consider that
fact. */ fact. */
#define NGHTTP2_MAX_CYCLE_DISTANCE (16384 * 256 + 255) #define NGHTTP2_MAX_CYCLE_DISTANCE \
((uint64_t)NGHTTP2_MAX_FRAME_SIZE_MAX * 256 + 255)
static int stream_less(const void *lhsx, const void *rhsx) { static int stream_less(const void *lhsx, const void *rhsx) {
const nghttp2_stream *lhs, *rhs; const nghttp2_stream *lhs, *rhs;
@ -52,13 +54,9 @@ static int stream_less(const void *lhsx, const void *rhsx) {
return lhs->seq < rhs->seq; return lhs->seq < rhs->seq;
} }
if (lhs->cycle < rhs->cycle) {
return rhs->cycle - lhs->cycle <= NGHTTP2_MAX_CYCLE_DISTANCE; return rhs->cycle - lhs->cycle <= NGHTTP2_MAX_CYCLE_DISTANCE;
} }
return lhs->cycle - rhs->cycle > NGHTTP2_MAX_CYCLE_DISTANCE;
}
void nghttp2_stream_init(nghttp2_stream *stream, int32_t stream_id, void nghttp2_stream_init(nghttp2_stream *stream, int32_t stream_id,
uint8_t flags, nghttp2_stream_state initial_state, uint8_t flags, nghttp2_stream_state initial_state,
int32_t weight, int32_t remote_initial_window_size, int32_t weight, int32_t remote_initial_window_size,
@ -135,14 +133,14 @@ static int stream_subtree_active(nghttp2_stream *stream) {
/* /*
* Returns next cycle for |stream|. * Returns next cycle for |stream|.
*/ */
static void stream_next_cycle(nghttp2_stream *stream, uint32_t last_cycle) { static void stream_next_cycle(nghttp2_stream *stream, uint64_t last_cycle) {
uint32_t penalty; uint64_t penalty;
penalty = (uint32_t)stream->last_writelen * NGHTTP2_MAX_WEIGHT + penalty = (uint64_t)stream->last_writelen * NGHTTP2_MAX_WEIGHT +
stream->pending_penalty; stream->pending_penalty;
stream->cycle = last_cycle + penalty / (uint32_t)stream->weight; stream->cycle = last_cycle + penalty / (uint32_t)stream->weight;
stream->pending_penalty = penalty % (uint32_t)stream->weight; stream->pending_penalty = (uint32_t)(penalty % (uint32_t)stream->weight);
} }
static int stream_obq_push(nghttp2_stream *dep_stream, nghttp2_stream *stream) { static int stream_obq_push(nghttp2_stream *dep_stream, nghttp2_stream *stream) {
@ -153,7 +151,7 @@ static int stream_obq_push(nghttp2_stream *dep_stream, nghttp2_stream *stream) {
stream_next_cycle(stream, dep_stream->descendant_last_cycle); stream_next_cycle(stream, dep_stream->descendant_last_cycle);
stream->seq = dep_stream->descendant_next_seq++; stream->seq = dep_stream->descendant_next_seq++;
DEBUGF("stream: stream=%d obq push cycle=%d\n", stream->stream_id, DEBUGF("stream: stream=%d obq push cycle=%lu\n", stream->stream_id,
stream->cycle); stream->cycle);
DEBUGF("stream: push stream %d to stream %d\n", stream->stream_id, DEBUGF("stream: push stream %d to stream %d\n", stream->stream_id,
@ -239,7 +237,7 @@ void nghttp2_stream_reschedule(nghttp2_stream *stream) {
nghttp2_pq_push(&dep_stream->obq, &stream->pq_entry); nghttp2_pq_push(&dep_stream->obq, &stream->pq_entry);
DEBUGF("stream: stream=%d obq resched cycle=%d\n", stream->stream_id, DEBUGF("stream: stream=%d obq resched cycle=%lu\n", stream->stream_id,
stream->cycle); stream->cycle);
dep_stream->last_writelen = stream->last_writelen; dep_stream->last_writelen = stream->last_writelen;
@ -248,9 +246,9 @@ void nghttp2_stream_reschedule(nghttp2_stream *stream) {
void nghttp2_stream_change_weight(nghttp2_stream *stream, int32_t weight) { void nghttp2_stream_change_weight(nghttp2_stream *stream, int32_t weight) {
nghttp2_stream *dep_stream; nghttp2_stream *dep_stream;
uint32_t last_cycle; uint64_t last_cycle;
int32_t old_weight; int32_t old_weight;
uint32_t wlen_penalty; uint64_t wlen_penalty;
if (stream->weight == weight) { if (stream->weight == weight) {
return; return;
@ -273,7 +271,7 @@ void nghttp2_stream_change_weight(nghttp2_stream *stream, int32_t weight) {
nghttp2_pq_remove(&dep_stream->obq, &stream->pq_entry); nghttp2_pq_remove(&dep_stream->obq, &stream->pq_entry);
wlen_penalty = (uint32_t)stream->last_writelen * NGHTTP2_MAX_WEIGHT; wlen_penalty = (uint64_t)stream->last_writelen * NGHTTP2_MAX_WEIGHT;
/* Compute old stream->pending_penalty we used to calculate /* Compute old stream->pending_penalty we used to calculate
stream->cycle */ stream->cycle */
@ -289,8 +287,7 @@ void nghttp2_stream_change_weight(nghttp2_stream *stream, int32_t weight) {
place */ place */
stream_next_cycle(stream, last_cycle); stream_next_cycle(stream, last_cycle);
if (stream->cycle < dep_stream->descendant_last_cycle && if (dep_stream->descendant_last_cycle - stream->cycle <=
(dep_stream->descendant_last_cycle - stream->cycle) <=
NGHTTP2_MAX_CYCLE_DISTANCE) { NGHTTP2_MAX_CYCLE_DISTANCE) {
stream->cycle = dep_stream->descendant_last_cycle; stream->cycle = dep_stream->descendant_last_cycle;
} }
@ -299,7 +296,7 @@ void nghttp2_stream_change_weight(nghttp2_stream *stream, int32_t weight) {
nghttp2_pq_push(&dep_stream->obq, &stream->pq_entry); nghttp2_pq_push(&dep_stream->obq, &stream->pq_entry);
DEBUGF("stream: stream=%d obq resched cycle=%d\n", stream->stream_id, DEBUGF("stream: stream=%d obq resched cycle=%lu\n", stream->stream_id,
stream->cycle); stream->cycle);
} }

View File

@ -148,9 +148,9 @@ struct nghttp2_stream {
/* Received body so far */ /* Received body so far */
int64_t recv_content_length; int64_t recv_content_length;
/* Base last_cycle for direct descendent streams. */ /* Base last_cycle for direct descendent streams. */
uint32_t descendant_last_cycle; uint64_t descendant_last_cycle;
/* Next scheduled time to sent item */ /* Next scheduled time to sent item */
uint32_t cycle; uint64_t cycle;
/* Next seq used for direct descendant streams */ /* Next seq used for direct descendant streams */
uint64_t descendant_next_seq; uint64_t descendant_next_seq;
/* Secondary key for prioritization to break a tie for cycle. This /* Secondary key for prioritization to break a tie for cycle. This