https://issues.apache.org/bugzilla/show_bug.cgi?id=56333

--- Comment #4 from Artem <[email protected]> ---
Comment on attachment 31520
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=31520
Test case working with httpd-2.4.9.

>// apxs -i -a -c mod_sustest.c
>// SetHandler sustest
>// ab -n 9999 -c 9 http://localhost/sustest
>
>#include <httpd.h>
>#include <http_protocol.h>
>#include <http_config.h>
>#include <http_request.h>
>#include <http_log.h>
>#include <http_connection.h>
>#include <ap_mpm.h>
>
>#include <unistd.h>
>
>module sustest_module;
>APLOG_USE_MODULE (sustest);
>
>static void render (request_rec* r) {
>  r->content_type = "text/html; charset=utf-8";
>  if (!r->header_only) {
>    ap_rputs ("<!doctype html><html lang=\"ru\"><head><meta 
> charset=\"UTF-8\"><title>test</title></head><body>\n", r);
>    if (r->filename) ap_rprintf (r, "FS path: %s<br/>\n", r->filename);
>    ap_rputs ("v. 02<br/>", r);
>    ap_rputs ("</body></html>\n", r);
>  }
>}
>
>static void setupSuspended (request_rec* r) {
>}
>
>void ap_resume_suspended (conn_rec* c);
>
>static void finishSuspended (request_rec* r) {
>  conn_rec* c = r->connection;
>  apr_thread_mutex_lock (r->invoke_mtx);
>
>  if (r->connection->aborted) {
>    ap_die (HTTP_INTERNAL_SERVER_ERROR, r);
>  } else if (r->status == HTTP_OK) {
>    apr_bucket_brigade* bb = apr_brigade_create (r->pool, 
> r->connection->bucket_alloc);
>    //APR_BRIGADE_INSERT_TAIL (bb, apr_bucket_flush_create 
> (r->connection->bucket_alloc));
>    APR_BRIGADE_INSERT_TAIL (bb, apr_bucket_eos_create 
> (r->connection->bucket_alloc));
>    ap_pass_brigade (r->output_filters, bb);
>    apr_brigade_destroy (bb);
>    ap_finalize_request_protocol (r);
>  }
>
>  apr_thread_mutex_unlock (r->invoke_mtx);
>  ap_process_request_after_handler (r);
>  ap_log_rerror (APLOG_MARK, LOG_INFO, r->status, r, "Calling 
> resume_suspended...");
>  ap_resume_suspended (c);
>}
>
>static void callback (void* vr) {
>  request_rec* r = (request_rec*) vr;
>  ap_log_rerror (APLOG_MARK, LOG_INFO, r->status, r, "Callback.");
>
>  if (!r->connection->aborted) render (r);
>
>  finishSuspended (r);
>}
>
>static void* thread_func (void* vr) {
>  usleep (100);
>  callback (vr);
>  return NULL;
>}
>
>static int sustest_handler (request_rec* r) {
>  if (!r->handler || strcmp (r->handler, "sustest")) return DECLINED;
>  if (ap_meets_conditions (r) != OK) {ap_log_rerror (APLOG_MARK, APLOG_NOTICE, 
> 0, r, "!ap_meets_conditions"); return DECLINED;}
>
>  ap_log_rerror (APLOG_MARK, LOG_INFO, r->status, r, "sustest_handler");
>  //render (r); return OK;
>  setupSuspended (r);
>
>  pthread_t thread;
>  if (pthread_create (&thread, NULL, thread_func, r) != 0) return DECLINED;
>  pthread_detach (thread);
>  //ap_mpm_register_timed_callback (apr_time_from_msec (90), callback, r);
>  return SUSPENDED;
>}
>
>static void sustest_hooks (apr_pool_t *pool) {
>  ap_hook_handler (sustest_handler, NULL, NULL, APR_HOOK_FIRST);
>}
>
>module sustest_module = {
>  STANDARD20_MODULE_STUFF,
>  NULL,
>  NULL,
>  NULL,
>  NULL,
>  NULL,
>  sustest_hooks
>};

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to