summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/http2/h2_mplx.c58
-rw-r--r--modules/http2/h2_mplx.h10
-rw-r--r--modules/http2/h2_session.c56
-rw-r--r--modules/http2/h2_session.h10
-rw-r--r--modules/http2/h2_stream.c28
-rw-r--r--modules/http2/h2_stream.h3
-rw-r--r--modules/http2/mod_http2.c17
7 files changed, 92 insertions, 90 deletions
diff --git a/modules/http2/h2_mplx.c b/modules/http2/h2_mplx.c
index c15b23ffad..3e79ab8558 100644
--- a/modules/http2/h2_mplx.c
+++ b/modules/http2/h2_mplx.c
@@ -249,8 +249,9 @@ static void c2_transit_recycle(h2_mplx *m, h2_c2_transit *transit)
* their HTTP/1 cousins, the separate allocator seems to work better
* than protecting a shared h2_session one with an own lock.
*/
-h2_mplx *h2_mplx_c1_create(h2_stream *stream0, server_rec *s, apr_pool_t *parent,
- h2_workers *workers)
+h2_mplx *h2_mplx_c1_create(int child_num, apr_uint32_t id, h2_stream *stream0,
+ server_rec *s, apr_pool_t *parent,
+ h2_workers *workers)
{
h2_conn_ctx_t *conn_ctx;
apr_status_t status = APR_SUCCESS;
@@ -262,7 +263,8 @@ h2_mplx *h2_mplx_c1_create(h2_stream *stream0, server_rec *s, apr_pool_t *parent
m->stream0 = stream0;
m->c1 = stream0->c2;
m->s = s;
- m->id = m->c1->id;
+ m->child_num = child_num;
+ m->id = id;
/* We create a pool with its own allocator to be used for
* processing secondary connections. This is the only way to have the
@@ -434,7 +436,7 @@ void h2_mplx_c1_destroy(h2_mplx *m)
int i, wait_secs = 60, old_aborted;
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c1,
- "h2_mplx(%ld): start release", m->id);
+ H2_MPLX_MSG(m, "start release"));
/* How to shut down a h2 connection:
* 0. abort and tell the workers that no more work will come from us */
m->aborted = 1;
@@ -451,8 +453,8 @@ void h2_mplx_c1_destroy(h2_mplx *m)
/* How to shut down a h2 connection:
* 1. cancel all streams still active */
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c1,
- "h2_mplx(%ld): release, %d/%d/%d streams (total/hold/purge), %d streams",
- m->id, (int)h2_ihash_count(m->streams),
+ H2_MPLX_MSG(m, "release, %d/%d/%d streams (total/hold/purge), %d streams"),
+ (int)h2_ihash_count(m->streams),
(int)h2_ihash_count(m->shold), m->spurge->nelts, m->processing_count);
while (!h2_ihash_iter(m->streams, m_stream_cancel_iter, m)) {
/* until empty */
@@ -477,8 +479,8 @@ void h2_mplx_c1_destroy(h2_mplx *m)
/* This can happen if we have very long running requests
* that do not time out on IO. */
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, m->c1, APLOGNO(03198)
- "h2_mplx(%ld): waited %d sec for %d streams",
- m->id, i*wait_secs, (int)h2_ihash_count(m->shold));
+ H2_MPLX_MSG(m, "waited %d sec for %d streams"),
+ i*wait_secs, (int)h2_ihash_count(m->shold));
h2_ihash_iter(m->shold, m_report_stream_iter, m);
}
}
@@ -487,15 +489,16 @@ void h2_mplx_c1_destroy(h2_mplx *m)
ap_assert(m->processing_count == 0);
if (!h2_ihash_empty(m->shold)) {
ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, m->c1, APLOGNO(03516)
- "h2_mplx(%ld): unexpected %d streams in hold",
- m->id, (int)h2_ihash_count(m->shold));
+ H2_MPLX_MSG(m, "unexpected %d streams in hold"),
+ (int)h2_ihash_count(m->shold));
h2_ihash_iter(m->shold, m_unexpected_stream_iter, m);
}
m->c1->aborted = old_aborted;
H2_MPLX_LEAVE(m);
- ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c1, "h2_mplx(%ld): released", m->id);
+ ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c1,
+ H2_MPLX_MSG(m, "released"));
}
apr_status_t h2_mplx_c1_stream_cleanup(h2_mplx *m, h2_stream *stream,
@@ -607,7 +610,7 @@ apr_status_t h2_mplx_c1_reprioritize(h2_mplx *m, h2_stream_pri_cmp_fn *cmp,
else {
h2_iq_sort(m->q, cmp, session);
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c1,
- "h2_mplx(%ld): reprioritize streams", m->id);
+ H2_MPLX_MSG(m, "reprioritize streams"));
status = APR_SUCCESS;
}
@@ -680,7 +683,7 @@ void h2_mplx_c1_process(h2_mplx *m,
}
else {
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c1,
- "h2_stream(%ld-%d): not found to process", m->id, sid);
+ H2_MPLX_MSG(m, "stream %d not found to process"), sid);
}
}
if (!m->is_registered && !h2_iq_empty(m->q)) {
@@ -691,7 +694,7 @@ void h2_mplx_c1_process(h2_mplx *m,
if (rv != APR_SUCCESS) {
m->is_registered = 0;
ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, m->c1, APLOGNO(10021)
- "h2_mplx(%ld): register at workers", m->id);
+ H2_MPLX_MSG(m, "register at workers"));
}
}
*pstream_count = (int)h2_ihash_count(m->streams);
@@ -706,8 +709,8 @@ void h2_mplx_c1_process(h2_mplx *m,
mem_w = apr_pool_num_bytes(m->workers->pool, 1);
mem_c1 = apr_pool_num_bytes(m->c1->pool, 1);
ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, m->c1,
- "h2_mplx(%ld): child mem=%ld, mplx mem=%ld, session mem=%ld, workers=%ld, c1=%ld",
- m->id, (long)mem_g, (long)mem_m, (long)mem_s, (long)mem_w, (long)mem_c1);
+ H2_MPLX_MSG(m, "child mem=%ld, mplx mem=%ld, session mem=%ld, workers=%ld, c1=%ld"),
+ (long)mem_g, (long)mem_m, (long)mem_s, (long)mem_w, (long)mem_c1);
} while (0);
#endif
@@ -819,9 +822,9 @@ static conn_rec *s_next_c2(h2_mplx *m)
if (!stream) {
if (m->processing_count >= m->processing_limit && !h2_iq_empty(m->q)) {
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, m->c1,
- "h2_session(%ld): delaying request processing. "
- "Current limit is %d and %d workers are in use.",
- m->id, m->processing_limit, m->processing_count);
+ H2_MPLX_MSG(m, "delaying request processing. "
+ "Current limit is %d and %d workers are in use."),
+ m->processing_limit, m->processing_count);
}
goto cleanup;
}
@@ -986,8 +989,8 @@ static void s_mplx_be_happy(h2_mplx *m, conn_rec *c, h2_conn_ctx_t *conn_ctx)
m->last_mood_change = now;
m->irritations_since = 0;
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c,
- "h2_mplx(%ld): mood update, increasing worker limit to %d",
- m->id, m->processing_limit);
+ H2_MPLX_MSG(m, "mood update, increasing worker limit to %d"),
+ m->processing_limit);
}
}
}
@@ -1016,8 +1019,8 @@ static void m_be_annoyed(h2_mplx *m)
m->last_mood_change = now;
m->irritations_since = 0;
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c1,
- "h2_mplx(%ld): mood update, decreasing worker limit to %d",
- m->id, m->processing_limit);
+ H2_MPLX_MSG(m, "mood update, decreasing worker limit to %d"),
+ m->processing_limit);
}
}
}
@@ -1110,8 +1113,8 @@ static apr_status_t mplx_pollset_poll(h2_mplx *m, apr_interval_time_t timeout,
m->polling = 1;
do {
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c1,
- "h2_mplx(%ld): enter polling timeout=%d",
- m->id, (int)apr_time_sec(timeout));
+ H2_MPLX_MSG(m, "enter polling timeout=%d"),
+ (int)apr_time_sec(timeout));
apr_array_clear(m->streams_ev_in);
apr_array_clear(m->streams_ev_out);
@@ -1149,12 +1152,11 @@ static apr_status_t mplx_pollset_poll(h2_mplx *m, apr_interval_time_t timeout,
if (APR_SUCCESS != rv) {
if (APR_STATUS_IS_TIMEUP(rv)) {
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c1,
- "h2_mplx(%ld): polling timed out ",
- m->id);
+ H2_MPLX_MSG(m, "polling timed out "));
}
else {
ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, m->c1, APLOGNO(10310)
- "h2_mplx(%ld): polling failed", m->id);
+ H2_MPLX_MSG(m, "polling failed"));
}
goto cleanup;
}
diff --git a/modules/http2/h2_mplx.h b/modules/http2/h2_mplx.h
index 4091d53e2d..42faf051ad 100644
--- a/modules/http2/h2_mplx.h
+++ b/modules/http2/h2_mplx.h
@@ -54,7 +54,8 @@ struct h2_c2_transit {
typedef struct h2_mplx h2_mplx;
struct h2_mplx {
- long id;
+ int child_num; /* child this runs in */
+ apr_uint32_t id; /* id unique per child */
conn_rec *c1; /* the main connection */
apr_pool_t *pool;
struct h2_stream *stream0; /* HTTP/2's stream 0 */
@@ -107,7 +108,9 @@ apr_status_t h2_mplx_c1_child_init(apr_pool_t *pool, server_rec *s);
* Create the multiplexer for the given HTTP2 session.
* Implicitly has reference count 1.
*/
-h2_mplx *h2_mplx_c1_create(struct h2_stream *stream0, server_rec *s, apr_pool_t *master,
+h2_mplx *h2_mplx_c1_create(int child_id, apr_uint32_t id,
+ struct h2_stream *stream0,
+ server_rec *s, apr_pool_t *master,
struct h2_workers *workers);
/**
@@ -221,4 +224,7 @@ apr_status_t h2_mplx_worker_pop_c2(h2_mplx *m, conn_rec **out_c2);
*/
void h2_mplx_worker_c2_done(conn_rec *c2);
+#define H2_MPLX_MSG(m, msg) \
+ "h2_mplx(%d-%lu): "msg, m->child_num, (unsigned long)m->id
+
#endif /* defined(__mod_h2__h2_mplx__) */
diff --git a/modules/http2/h2_session.c b/modules/http2/h2_session.c
index 117a863267..cb185d7bf1 100644
--- a/modules/http2/h2_session.c
+++ b/modules/http2/h2_session.c
@@ -17,6 +17,7 @@
#include <assert.h>
#include <stddef.h>
#include <apr_thread_cond.h>
+#include <apr_atomic.h>
#include <apr_base64.h>
#include <apr_strings.h>
@@ -235,14 +236,14 @@ static int on_data_chunk_recv_cb(nghttp2_session *ngh2, uint8_t flags,
stream = get_stream(session, stream_id);
if (stream) {
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c1,
- "h2_stream(%ld-%d): write %ld bytes of DATA",
- session->id, (int)stream_id, (long)len);
+ H2_SSSN_STRM_MSG(session, stream_id, "write %ld bytes of DATA"),
+ (long)len);
status = h2_stream_recv_DATA(stream, flags, data, len);
}
else {
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c1, APLOGNO(03064)
- "h2_stream(%ld-%d): on_data_chunk for unknown stream",
- session->id, (int)stream_id);
+ H2_SSSN_STRM_MSG(session, stream_id,
+ "on_data_chunk for unknown stream"));
rv = NGHTTP2_ERR_CALLBACK_FAILURE;
}
@@ -306,8 +307,8 @@ static int on_header_cb(nghttp2_session *ngh2, const nghttp2_frame *frame,
stream = get_stream(session, frame->hd.stream_id);
if (!stream) {
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c1, APLOGNO(02920)
- "h2_stream(%ld-%d): on_header unknown stream",
- session->id, (int)frame->hd.stream_id);
+ H2_SSSN_STRM_MSG(session, frame->hd.stream_id,
+ "on_header unknown stream"));
return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
}
@@ -379,23 +380,22 @@ static int on_frame_recv_cb(nghttp2_session *ng2s,
case NGHTTP2_PRIORITY:
session->reprioritize = 1;
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c1,
- "h2_stream(%ld-%d): PRIORITY frame "
- " weight=%d, dependsOn=%d, exclusive=%d",
- session->id, (int)frame->hd.stream_id,
+ H2_SSSN_STRM_MSG(session, frame->hd.stream_id, "PRIORITY frame "
+ " weight=%d, dependsOn=%d, exclusive=%d"),
frame->priority.pri_spec.weight,
frame->priority.pri_spec.stream_id,
frame->priority.pri_spec.exclusive);
break;
case NGHTTP2_WINDOW_UPDATE:
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c1,
- "h2_stream(%ld-%d): WINDOW_UPDATE incr=%d",
- session->id, (int)frame->hd.stream_id,
+ H2_SSSN_STRM_MSG(session, frame->hd.stream_id,
+ "WINDOW_UPDATE incr=%d"),
frame->window_update.window_size_increment);
break;
case NGHTTP2_RST_STREAM:
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c1, APLOGNO(03067)
- "h2_stream(%ld-%d): RST_STREAM by client, error=%d",
- session->id, (int)frame->hd.stream_id,
+ H2_SSSN_STRM_MSG(session, frame->hd.stream_id,
+ "RST_STREAM by client, error=%d"),
(int)frame->rst_stream.error_code);
if (stream && stream->initiated_on) {
/* A stream reset on a request we sent it. Normal, when the
@@ -499,8 +499,7 @@ static int on_send_data_cb(nghttp2_session *ngh2,
if (!stream) {
ap_log_cerror(APLOG_MARK, APLOG_ERR, APR_NOTFOUND, session->c1,
APLOGNO(02924)
- "h2_stream(%ld-%d): send_data, stream not found",
- session->id, (int)stream_id);
+ H2_SSSN_STRM_MSG(session, stream_id, "send_data, stream not found"));
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
@@ -613,8 +612,8 @@ static int on_invalid_header_cb(nghttp2_session *ngh2,
h2_stream *stream;
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c1, APLOGNO(03456)
- "h2_stream(%ld-%d): invalid header '%s: %s'",
- session->id, (int)frame->hd.stream_id,
+ H2_SSSN_STRM_MSG(session, frame->hd.stream_id,
+ "invalid header '%s: %s'"),
apr_pstrndup(session->pool, (const char *)name, namelen),
apr_pstrndup(session->pool, (const char *)value, valuelen));
stream = get_stream(session, frame->hd.stream_id);
@@ -844,12 +843,15 @@ static apr_status_t session_pool_cleanup(void *data)
return APR_SUCCESS;
}
+static /* atomic */ apr_uint32_t next_id;
+
apr_status_t h2_session_create(h2_session **psession, conn_rec *c, request_rec *r,
server_rec *s, h2_workers *workers)
{
nghttp2_session_callbacks *callbacks = NULL;
nghttp2_option *options = NULL;
uint32_t n;
+ int thread_num;
apr_pool_t *pool = NULL;
h2_session *session;
h2_stream *stream0;
@@ -865,7 +867,16 @@ apr_status_t h2_session_create(h2_session **psession, conn_rec *c, request_rec *
}
*psession = session;
- session->id = c->id;
+ /* c->id does not give a unique id for the lifetime of the session.
+ * mpms like event change c->id when re-activating a keepalive
+ * connection based on the child_num+thread_num of the worker
+ * processing it.
+ * We'd like to have an id that remains constant and unique bc
+ * h2 streams can live through keepalive periods. While double id
+ * will not lead to processing failures, it will confuse log analysis.
+ */
+ ap_sb_get_child_thread(c->sbh, &session->child_num, &thread_num);
+ session->id = apr_atomic_inc32(&next_id);
session->c1 = c;
session->r = r;
session->s = s;
@@ -890,7 +901,8 @@ apr_status_t h2_session_create(h2_session **psession, conn_rec *c, request_rec *
stream0 = h2_stream_create(0, session->pool, session, NULL, 0);
stream0->c2 = session->c1; /* stream0's connection is the main connection */
- session->mplx = h2_mplx_c1_create(stream0, s, session->pool, workers);
+ session->mplx = h2_mplx_c1_create(session->child_num, session->id,
+ stream0, s, session->pool, workers);
if (!session->mplx) {
apr_pool_destroy(pool);
return APR_ENOTIMPL;
@@ -1182,9 +1194,9 @@ apr_status_t h2_session_set_prio(h2_session *session, h2_stream *stream,
rv = nghttp2_session_change_stream_priority(session->ngh2, id_parent, &ps);
if (rv < 0) {
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, session->c1, APLOGNO(03202)
- "h2_stream(%ld-%d): PUSH BEFORE, weight=%d, "
- "depends=%d, returned=%d",
- session->id, id_parent, ps.weight, ps.stream_id, rv);
+ H2_SSSN_STRM_MSG(session, id_parent,
+ "PUSH BEFORE, weight=%d, depends=%d, returned=%d"),
+ ps.weight, ps.stream_id, rv);
return APR_EGENERAL;
}
nghttp2_priority_spec_init(&ps, id_grandpa, w, 0);
diff --git a/modules/http2/h2_session.h b/modules/http2/h2_session.h
index c9f2cc50ee..2cf2856efb 100644
--- a/modules/http2/h2_session.h
+++ b/modules/http2/h2_session.h
@@ -62,8 +62,8 @@ typedef enum {
} h2_session_event_t;
typedef struct h2_session {
- long id; /* identifier of this session, unique
- * inside a httpd process */
+ int child_num; /* child number this session runs in */
+ apr_uint32_t id; /* identifier of this session, unique per child */
conn_rec *c1; /* the main connection this session serves */
request_rec *r; /* the request that started this in case
* of 'h2c', NULL otherwise */
@@ -193,9 +193,13 @@ void h2_session_dispatch_event(h2_session *session, h2_session_event_t ev,
#define H2_SSSN_MSG(s, msg) \
- "h2_session(%ld,%s,%d): "msg, s->id, h2_session_state_str(s->state), \
+ "h2_session(%d-%lu,%s,%d): "msg, s->child_num, (unsigned long)s->id, \
+ h2_session_state_str(s->state), \
s->open_streams
#define H2_SSSN_LOG(aplogno, s, msg) aplogno H2_SSSN_MSG(s, msg)
+#define H2_SSSN_STRM_MSG(s, stream_id, msg) \
+ "h2_stream(%d-%lu-%d): "msg, s->child_num, (unsigned long)s->id, stream_id
+
#endif /* defined(__mod_h2__h2_session__) */
diff --git a/modules/http2/h2_stream.c b/modules/http2/h2_stream.c
index ea75ec21fc..204b08ae4a 100644
--- a/modules/http2/h2_stream.c
+++ b/modules/http2/h2_stream.c
@@ -1303,9 +1303,8 @@ apr_status_t h2_stream_in_consumed(h2_stream *stream, apr_off_t amount)
NGHTTP2_FLAG_NONE, stream->id, win);
}
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, session->c1,
- "h2_stream(%ld-%d): consumed %ld bytes, window now %d/%d",
- session->id, stream->id, (long)amount,
- cur_size, stream->in_window_size);
+ H2_STRM_MSG(stream, "consumed %ld bytes, window now %d/%d"),
+ (long)amount, cur_size, stream->in_window_size);
}
#endif /* #ifdef H2_NG2_LOCAL_WIN_SIZE */
}
@@ -1372,15 +1371,13 @@ static ssize_t stream_data_cb(nghttp2_session *ng2s,
if (!stream || !stream->output) {
ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c1,
APLOGNO(02937)
- "h2_stream(%ld-%d): data_cb, stream not found",
- session->id, (int)stream_id);
+ H2_SSSN_STRM_MSG(session, stream_id, "data_cb, stream not found"));
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
if (!stream->response) {
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c1,
APLOGNO(10299)
- "h2_stream(%ld-%d): data_cb, no response seen yet",
- session->id, (int)stream_id);
+ H2_SSSN_STRM_MSG(session, stream_id, "data_cb, no response seen yet"));
return NGHTTP2_ERR_DEFERRED;
}
if (stream->rst_error) {
@@ -1388,14 +1385,12 @@ static ssize_t stream_data_cb(nghttp2_session *ng2s,
}
if (!stream->out_buffer) {
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c1,
- "h2_stream(%ld-%d): suspending",
- session->id, (int)stream_id);
+ H2_SSSN_STRM_MSG(session, stream_id, "suspending"));
return NGHTTP2_ERR_DEFERRED;
}
if (h2_c1_io_needs_flush(&session->io)) {
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c1,
- "h2_stream(%ld-%d): suspending on c1 out needs flush",
- session->id, (int)stream_id);
+ H2_SSSN_STRM_MSG(session, stream_id, "suspending on c1 out needs flush"));
h2_stream_dispatch(stream, H2_SEV_OUT_C1_BLOCK);
return NGHTTP2_ERR_DEFERRED;
}
@@ -1415,8 +1410,9 @@ static ssize_t stream_data_cb(nghttp2_session *ng2s,
if (buf_len < length && !eos) {
/* read more? */
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c1,
- "h2_stream(%ld-%d): need more (read len=%ld, %ld in buffer)",
- session->id, (int)stream_id, (long)length, (long)buf_len);
+ H2_SSSN_STRM_MSG(session, stream_id,
+ "need more (read len=%ld, %ld in buffer)"),
+ (long)length, (long)buf_len);
rv = buffer_output_receive(stream);
/* process all headers sitting at the buffer head. */
while (APR_SUCCESS == rv && !eos && !stream->sent_trailers) {
@@ -1460,8 +1456,7 @@ static ssize_t stream_data_cb(nghttp2_session *ng2s,
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c1,
H2_STRM_LOG(APLOGNO(03071), stream, "data_cb, suspending"));
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c1,
- "h2_stream(%ld-%d): suspending",
- session->id, (int)stream_id);
+ H2_SSSN_STRM_MSG(session, stream_id, "suspending"));
return NGHTTP2_ERR_DEFERRED;
}
@@ -1521,8 +1516,7 @@ apr_status_t h2_stream_read_output(h2_stream *stream)
nghttp2_session_resume_data(stream->session->ngh2, stream->id);
ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c1,
- "h2_stream(%ld-%d): resumed",
- stream->session->id, (int)stream->id);
+ H2_STRM_MSG(stream, "resumed"));
cleanup:
return rv;
diff --git a/modules/http2/h2_stream.h b/modules/http2/h2_stream.h
index 110c11efa3..c24e9028e6 100644
--- a/modules/http2/h2_stream.h
+++ b/modules/http2/h2_stream.h
@@ -285,7 +285,8 @@ const char *h2_stream_state_str(const h2_stream *stream);
int h2_stream_is_ready(h2_stream *stream);
#define H2_STRM_MSG(s, msg) \
- "h2_stream(%ld-%d,%s): "msg, s->session->id, s->id, h2_stream_state_str(s)
+ "h2_stream(%d-%lu-%d,%s): "msg, s->session->child_num, \
+ (unsigned long)s->session->id, s->id, h2_stream_state_str(s)
#define H2_STRM_LOG(aplogno, s, msg) aplogno H2_STRM_MSG(s, msg)
diff --git a/modules/http2/mod_http2.c b/modules/http2/mod_http2.c
index e7f1002912..4aa5155d77 100644
--- a/modules/http2/mod_http2.c
+++ b/modules/http2/mod_http2.c
@@ -158,25 +158,8 @@ static void http2_get_num_workers(server_rec *s, int *minw, int *maxw)
*/
static void h2_child_init(apr_pool_t *pchild, server_rec *s)
{
- apr_allocator_t *allocator;
- apr_thread_mutex_t *mutex;
apr_status_t rv;
- /* The allocator of pchild has no mutex with MPM prefork, but we need one
- * for h2 workers threads synchronization. Even though mod_http2 shouldn't
- * be used with prefork, better be safe than sorry, so forcibly set the
- * mutex here. For MPM event/worker, pchild has no allocator so pconf's
- * is used, with its mutex.
- */
- allocator = apr_pool_allocator_get(pchild);
- if (allocator) {
- mutex = apr_allocator_mutex_get(allocator);
- if (!mutex) {
- apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, pchild);
- apr_allocator_mutex_set(allocator, mutex);
- }
- }
-
/* Set up our connection processing */
rv = h2_c1_child_init(pchild, s);
if (APR_SUCCESS == rv) {