apr_pool_t *pool;
conn_rec *c;
void *cfg;
- unsigned long l;
+ unsigned int free_bits;
+ unsigned long l, lor;
AP_DEBUG_ASSERT(master);
ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, master,
* many streams.
*/
l = master->id;
+ lor = 0;
if (sizeof(unsigned long) >= 8 && l < APR_UINT32_MAX) {
- c->id = l|((unsigned long)slave_id << 32);
+ free_bits = 32;
}
else {
- c->id = l^(~slave_id);
+ /* Assume that we never encounter ranges stream ids where this
+ * leads to many collisions. With 32 bit longs, we have a hard time
+ * to make server wide unique ids. */
+ free_bits = 16;
+ lor= (1 << 31);
}
+ c->id = (l^((unsigned long)slave_id << free_bits))|lor;
c->master = master;
c->pool = pool;
c->conn_config = ap_create_conn_config(pool);
}
}
-void h2_from_h1_set_basic_http_header(apr_table_t *headers, request_rec *r,
- apr_pool_t *pool)
+static void set_basic_http_header(apr_table_t *headers, request_rec *r,
+ apr_pool_t *pool)
{
char *date = NULL;
const char *proxy_date = NULL;
headers = apr_table_make(r->pool, 10);
- h2_from_h1_set_basic_http_header(headers, r, r->pool);
+ set_basic_http_header(headers, r, r->pool);
if (r->status == HTTP_NOT_MODIFIED) {
apr_table_do((int (*)(void *, const char *, const char *)) copy_header,
(void *) headers, r->headers_out,
return h2_headers_rcreate(r, r->status, headers, r->pool);
}
-apr_status_t h2_headers_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
+apr_status_t h2_filter_headers_out(ap_filter_t *f, apr_bucket_brigade *bb)
{
h2_task *task = f->ctx;
request_rec *r = f->r;
struct h2_headers;
struct h2_task;
-apr_status_t h2_headers_output_filter(ap_filter_t *f, apr_bucket_brigade *bb);
+apr_status_t h2_filter_headers_out(ap_filter_t *f, apr_bucket_brigade *bb);
apr_status_t h2_filter_request_in(ap_filter_t* f,
apr_bucket_brigade* brigade,
apr_status_t h2_filter_trailers_out(ap_filter_t *f, apr_bucket_brigade *bb);
-void h2_from_h1_set_basic_http_header(apr_table_t *headers, request_rec *r,
- apr_pool_t *pool);
-
#endif /* defined(__mod_h2__h2_from_h1__) */
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, task->c,
"h2_ngn_shed(%ld): pushing request %s to %s",
shed->c->id, task->id, ngn->id);
- if (!h2_task_is_detached(task)) {
+ if (!h2_task_has_thawed(task)) {
h2_task_freeze(task);
}
ngn_add_task(ngn, task, r);
for (entry = H2_REQ_ENTRIES_FIRST(&ngn->entries);
entry != H2_REQ_ENTRIES_SENTINEL(&ngn->entries);
entry = H2_NGN_ENTRY_NEXT(entry)) {
- if (h2_task_is_detached(entry->task)
+ if (h2_task_has_thawed(entry->task)
|| (entry->task->engine == ngn)) {
/* The task hosting this engine can always be pulled by it.
* For other task, they need to become detached, e.g. no longer
NULL, AP_FTYPE_PROTOCOL);
ap_register_input_filter("H2_REQUEST", h2_filter_request_in,
NULL, AP_FTYPE_PROTOCOL);
- ap_register_output_filter("H2_RESPONSE", h2_headers_output_filter,
+ ap_register_output_filter("H2_RESPONSE", h2_filter_headers_out,
NULL, AP_FTYPE_PROTOCOL);
ap_register_output_filter("H2_TRAILERS_OUT", h2_filter_trailers_out,
NULL, AP_FTYPE_PROTOCOL);
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, task->c, APLOGNO(03407)
"h2_task(%s), thawed", task->id);
}
- task->detached = 1;
+ task->thawed = 1;
return APR_SUCCESS;
}
-int h2_task_is_detached(h2_task *task)
+int h2_task_has_thawed(h2_task *task)
{
- return task->detached;
+ return task->thawed;
}
unsigned int filters_set : 1;
unsigned int frozen : 1;
- unsigned int detached : 1;
- unsigned int worker_started : 1; /* h2_worker started processing for this io */
- unsigned int worker_done : 1; /* h2_worker finished for this io */
+ unsigned int thawed : 1;
+ unsigned int worker_started : 1; /* h2_worker started processing */
+ unsigned int worker_done : 1; /* h2_worker finished */
apr_time_t started_at; /* when processing started */
apr_time_t done_at; /* when processing was done */
apr_status_t h2_task_freeze(h2_task *task);
apr_status_t h2_task_thaw(h2_task *task);
-int h2_task_is_detached(h2_task *task);
+int h2_task_has_thawed(h2_task *task);
#endif /* defined(__mod_h2__h2_task__) */
* @macro
* Version number of the http2 module as c string
*/
-#define MOD_HTTP2_VERSION "1.7.1"
+#define MOD_HTTP2_VERSION "1.7.2"
/**
* @macro
* 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.
*/
-#define MOD_HTTP2_VERSION_NUM 0x010701
+#define MOD_HTTP2_VERSION_NUM 0x010702
#endif /* mod_h2_h2_version_h */