httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Niko Goutte <ngou...@hotmail.com>
Subject RE: cpu 100%
Date Thu, 31 Mar 2011 17:10:43 GMT

> Date: Thu, 31 Mar 2011 18:22:34 +0200
> Subject: Re: cpu 100%
> From: sorinm@gmail.com
> To: modules-dev@httpd.apache.org
> 
> > -------------------------------------------------------------------------------------------------------------------------------
> > HERE IS:
> > #include <httpd.h>
> > #include <http_config.h>
> > #include <http_protocol.h>
> > #include <http_request.h>
> > #include <http_log.h>
> > #include <ap_compat.h>
> > #include <apr_buckets.h>
> > #include <apr_strings.h>
> >
> >
> > #define ASE_FILE_SIZE                            512000
> > #define ASE_BUFFER_SIZE           104858
> >
> > module AP_MODULE_DECLARE_DATA     ase_mod_module;
> > #define ASE_MOD_HANDLER "ase-mod.extensions"
> >
> > static int ase_mod_handler(request_rec *r)
> > {
> >    apr_status_t rv = APR_SUCCESS;
> >    apr_bucket_brigade* bb = NULL;;
> >    apr_bucket* b = NULL;;
> >    char filename[256];
> >
> >    /* First, some housekeeping. */
> >    if (((!r->handler) != 0)|| (strcmp(r->handler, ASE_MOD_HANDLER)))
> >    {
> >        /* r->handler wasn't "ase_mod", so it's none of our business */
> >        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,"Decline processing file
%s is not %s and handler %s", r->filename,ASE_MOD_HANDLER,r->handler);
> >        return DECLINED;
> >    }
> >
> >    if (r->method_number != M_GET)
> >    {
> >        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,"Error METHOD_NOT_ALLOWED
(%d)",r->method_number);
> >        return HTTP_METHOD_NOT_ALLOWED;
> >    }
> >
> >    ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,"%s",r->the_request);
> >
> >    // Construct filename
> >    strncpy(filename, r->filename, sizeof(filename) / sizeof(char) - 1);
> >    filename[sizeof(filename) / sizeof(char) - 1] = '\0';
> >
> >    ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,"filename = %s",filename);
> >
> >    int DataSize = ASE_FILE_SIZE;
> >
> >    ap_set_content_type(r, "video/ase");
> >
> >    ap_update_mtime(r, r->finfo.mtime);
> >    ap_set_last_modified(r);
> >
> >    apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
> >
> >    r->vlist_validator = apr_pstrcat(r->pool, "X",apr_itoa(r->pool, DataSize),
"\"", NULL);
> >    ap_set_etag(r);
> >
> >    char content_range[64];
> >    sprintf(content_range,"bytes %d-%d/%d",0,ASE_FILE_SIZE-1,ASE_FILE_SIZE);
> >    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,"Add content range %s",content_range);
> >    apr_table_setn(r->headers_out, "Content-Range",content_range);
> >
> >    r->status = HTTP_OK;
> >
> >    bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
> >    char* Buf;
> >    Buf = apr_palloc(r->pool,ASE_BUFFER_SIZE);
> >    int size = ASE_BUFFER_SIZE;
> >
> >    unsigned int count = 0;
> >    while(DataSize>0)
> >    {
> >        if((DataSize - size)<0)
> >        {
> >            size = DataSize;
> >        }
> >
> >        memset(Buf,count,size);
> >
> >        b = apr_bucket_pool_create(Buf ,size, r->pool, r->connection->bucket_alloc)
;
> >
> >        APR_BRIGADE_INSERT_TAIL(bb, b);
> >        APR_BRIGADE_INSERT_TAIL(bb,apr_bucket_flush_create(bb->bucket_alloc));
> >
> >        if(DataSize <= size)
> >        {
> >            APR_BRIGADE_INSERT_TAIL(bb,apr_bucket_eos_create(bb->bucket_alloc));
> >            ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,"APR_BRIGADE_INSERT_TAIL
EOS Bucket");
> >        }
> >
> >        rv = ap_pass_brigade(r->output_filters, bb);
> >
> >        if (rv != APR_SUCCESS)
> >        {
> >            ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,"HTTP_INTERNAL_SERVER_ERROR
ap_pass_brigade ");
> >            r->status = HTTP_INTERNAL_SERVER_ERROR;
> >            return r->status;
> >        }
> >
> >        DataSize = DataSize - size;
> >        count++;
> >        ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,"ap_pass_brigade, DataSize
=  %d and Size = %d",DataSize, size );
> >
> >        apr_brigade_cleanup(bb);
> >    }
> >
> >    ap_log_error(APLOG_MARK, APLOG_INFO, 0, r->server,"Out of While");
> >
> >    apr_bucket_delete(b);
> 
> Try to remove this apr_bucket_delete from here. apr_brigade_cleanup in
> the while loop deletes the buckets in the brigade. I think you delete
> b twice.
> 
> Sorin

 

That's true, I've no more the segmentation fault but in wireshark capture on the client side,
I've this error message only in prefork mode:

 

GET /mmrk_dummy_2mbps_10s.mmrk?TxId=8 HTTP/1.1
Range: bytes=0-511999
User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3
libidn/0.6.5
Host: 192.X.X.X

Accept: */*
Cache-Control: no-cache

HTTP/1.1 200 OK
Date: Thu, 31 Mar 2011 16:53:57 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Fri, 25 Mar 2011 11:18:16 GMT
Accept-Ranges: bytes
ETag: "12a8006-4e2e90-49f4cc0186e00;512000"
Content-Range: bytes 0-511999/512000
Connection: close
Transfer-Encoding: chunked
Content-Type: video/ase

1999a + DATA
1999a + DATA
1999a + DATA
1999a + DATA
0

23e
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>200 OK</title>
</head><body>
<h1>OK</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
 root@localhost and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log.</p>
<hr>
<address>Apache/2.2.3 (CentOS) Server at 192.X.X.X Port 80</address>
</body></html>

0

 


 
 		 	   		  
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message