Welcome! Log In Create A New Profile

Advanced

Re: crash in ngx_add_timer

April 19, 2017 03:18PM
Thanks Ben,
That worked! I wonder why these data-structures where not initialized
earlier?



On Tue, Apr 18, 2017 at 7:23 PM, 734819342 <734819342@qq.com> wrote:

> Hi,
>
>
> U should not call ngx_add_timer there, cause ngx_event_timer_rbtree
> is initialized in [init process].
>
>
> ----------------------------
>
> Ben
> best regards
>
>
>
> Original Message
> *Sender:* Dk Jack<dnj0496@gmail.com>
> *Recipient:* nginx-devel@nginx.org<nginx-devel@nginx.org>
> *Date:* Wednesday, Apr 19, 2017 10:03
> *Subject:* Re: crash in ngx_add_timer
>
> Hi,
> The crash is happening at line:
>
> ngx_add_timer(&ev2, 6); // line 81
>
> i.e. when it's trying to insert the second time. It doesn't even get to
> the handler.
>
> What would be a good value to assign to ev->log? I added:
>
> ev->log = cf->cycle->log
>
> I am still getting the crash when I try to insert the second timer.
>
> On Tue, Apr 18, 2017 at 6:53 PM, 胡聪 (hucc) <hucong.c@foxmail.com> wrote:
>
>> Hi,
>>
>> At the first glance, the ev->log should be assigned a valid value.
>>
>>
>> ------------------ Original ------------------
>> *From: * "Dk Jack";<dnj0496@gmail.com>;
>> *Send time:* Wednesday, Apr 19, 2017 8:23 AM
>> *To:* "nginx-devel"<nginx-devel@nginx.org>;
>> *Subject: * Re: crash in ngx_add_timer
>>
>> resending since the attachment which had the code didn't make it...
>>
>> Dk.
>>
>> #include <assert.h>
>> #include <nginx.h>
>> #include <ngx_config.h>
>> #include <ngx_core.h>
>> #include <ngx_http.h>
>>
>> static ngx_event_t ev1;
>> static ngx_event_t ev2;
>> static ngx_event_t ev3;
>>
>> char ev1_data[] = "event1";
>> char ev2_data[] = "event2";
>> char ev3_data[] = "event3";
>>
>> static ngx_int_t
>> ngx_test_handler(ngx_http_request_t *r)
>> {
>> if (r->main->internal) {
>> return NGX_DECLINED;
>> }
>>
>> r->main->internal = 1;
>>
>> ngx_table_elt_t *h;
>> h = ngx_list_push(&r->headers_out.headers);
>> h->hash = 1;
>> ngx_str_set(&h->key, "X-NGINX-Test");
>> ngx_str_set(&h->value, "Hello World!");
>>
>> return NGX_DECLINED;
>> }
>>
>> static void
>> ev1_handler(ngx_event_t* ev)
>> {
>> ngx_log_error(NGX_LOG_ERR, ev->log, 0, "received event: %s", (char *)
>> ev->data);
>> ngx_add_timer(&ev1, 5);
>> }
>>
>> static void
>> ev2_handler(ngx_event_t* ev)
>> {
>> ngx_log_error(NGX_LOG_ERR, ev->log, 0, "received event: %s", (char *)
>> ev->data);
>> ngx_add_timer(&ev2, 6);
>> }
>>
>> static void
>> ev3_handler(ngx_event_t* ev)
>> {
>> ngx_log_error(NGX_LOG_ERR, ev->log, 0, "received event: %s", (char *)
>> ev->data);
>> ngx_add_timer(&ev3, 7);
>> }
>>
>> static ngx_int_t
>> ngx_test_init (ngx_conf_t *cf)
>> {
>> ngx_http_handler_pt *h;
>> ngx_http_core_main_conf_t *cmcf;
>>
>> cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
>> h = ngx_array_push(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers);
>>
>> if (h == NULL) {
>> ngx_log_error(NGX_LOG_ERR, cf->log, 0, "Cannot retrieve Nginx access
>> handler pointer");
>> return NGX_ERROR;
>> }
>>
>> *h = ngx_test_handler;
>> ngx_log_error(NGX_LOG_INFO, cf->log, 0, "[test] Installed test
>> handler");
>>
>> ev1.handler = ev1_handler;
>> ev1.data = ev1_data;
>>
>> ev2.handler = ev2_handler;
>> ev2.data = ev2_data;
>>
>> ev3.handler = ev3_handler;
>> ev3.data = ev3_data;
>>
>> ngx_add_timer(&ev1, 5);
>> ngx_add_timer(&ev2, 6);
>> ngx_add_timer(&ev3, 7);
>>
>> return NGX_OK;
>> }
>>
>> static char *
>> parse_test_configuration (ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
>> {
>> ngx_str_t *value;
>>
>> if (cf->args->nelts != 2) {
>> ngx_log_error(NGX_LOG_ERR, cf->log, 0
>> , "[ss-config] invalid params for config_file. Expected
>> 2 received %d"
>> , cf->args->nelts);
>> return NGX_CONF_ERROR;
>> }
>>
>> value = cf->args->elts;
>>
>> ngx_log_error(NGX_LOG_ERR, cf->log, 0, "file-path: %V", &value[1]);
>>
>> return NGX_CONF_OK;
>> }
>>
>>
>> static ngx_http_module_t ngx_test_module_ctx = {
>> NULL, /* preconfiguration */
>> ngx_test_init, /* postconfiguration */
>> NULL, /* create main configuration */
>> NULL, /* init main configuration */
>> NULL, /* create server configuration */
>> NULL, /* merge server configuration */
>> NULL, /* create location configuration */
>> NULL /* merge location configuration */
>> };
>>
>> static ngx_command_t ngx_test_module_cmds[] = {
>> {
>> ngx_string("config_file"),
>> NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
>> parse_test_configuration,
>> 0,
>> 0,
>> NULL
>> }
>> , ngx_null_command
>> };
>>
>> ngx_module_t nginx_test_module = {
>> NGX_MODULE_V1,
>> &ngx_test_module_ctx, /* module context */
>> ngx_test_module_cmds, /* module directives */
>> NGX_HTTP_MODULE, /* module type */
>> NULL, /* init master */
>> NULL, /* init module */
>> NULL, /* init process */
>> NULL, /* init thread */
>> NULL, /* exit thread */
>> NULL, /* exit process */
>> NULL, /* exit master */
>> NGX_MODULE_V1_PADDING
>> };
>>
>>
>> On Tue, Apr 18, 2017 at 5:12 PM, Dk Jack <dnj0496@gmail.com> wrote:
>>
>>> Hi,
>>> I am new to NGinx modules and I trying to write an nginx module. I am
>>> having an issue
>>> where my module crashes when adding multiple timers. The first timer
>>> adds fine.
>>> However, when I go to add the second timer, it crashes. I've simplified
>>> the code to a very
>>> basic module (which is attached to this email). The backtrace is
>>> provided as well.
>>> Do I need to do some sort of initialization before I add multiple
>>> timers. Any advice/help
>>> is appreciated. Thanks.
>>>
>>> Dk.
>>>
>>> Program received signal SIGSEGV, Segmentation fault.
>>> 0x0000000000000000 in ?? ()
>>> (gdb) bt
>>> #0 0x0000000000000000 in ?? ()
>>> #1 0x000000000040d68b in ngx_rbtree_insert (tree=0x69dda0
>>> <ngx_event_timer_rbtree>,
>>> node=node@entry=0x69db08 <ev2+40>) at src/core/ngx_rbtree.c:44
>>> #2 0x000000000046ceb2 in ngx_event_add_timer (timer=6, ev=0x69dae0
>>> <ev2>)
>>> at src/event/ngx_event_timer.h:84
>>> #3 ngx_test_init (cf=<optimized out>)
>>> at /home/ubuntu/git/mitigator/nginx/build/../modules/nginx_miti
>>> gator_module/platform/nginx-test-module.c:81
>>> #4 0x0000000000424e83 in ngx_http_block (cf=0x7fffffffe0a0,
>>> cmd=<optimized out>,
>>> conf=<optimized out>) at src/http/ngx_http.c:315
>>> #5 0x000000000041446b in ngx_conf_handler (last=1, cf=0x7fffffffe0a0)
>>> at src/core/ngx_conf_file.c:427
>>> #6 ngx_conf_parse (cf=cf@entry=0x7fffffffe0a0, filename=filename@entry
>>> =0x6ad570)
>>> at src/core/ngx_conf_file.c:283
>>> #7 0x0000000000411e1a in ngx_init_cycle (old_cycle=old_cycle@entry=0x7
>>> fffffffe260)
>>> at src/core/ngx_cycle.c:268
>>> #8 0x0000000000404208 in main (argc=<optimized out>, argv=<optimized
>>> out>) at src/core/nginx.c:268
>>> (gdb)
>>>
>>
>>
>> _______________________________________________
>> nginx-devel mailing list
>> nginx-devel@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>>
>
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

crash in ngx_add_timer

dnj0496 925 April 18, 2017 08:14PM

Re: crash in ngx_add_timer

dnj0496 895 April 18, 2017 08:24PM

Re: crash in ngx_add_timer

胡聪 (hucc) 424 April 18, 2017 09:54PM

Re: crash in ngx_add_timer

dnj0496 636 April 18, 2017 10:04PM

Re: crash in ngx_add_timer

734819342 443 April 18, 2017 10:24PM

Re: crash in ngx_add_timer

胡聪 (hucc) 515 April 18, 2017 10:32PM

Re: crash in ngx_add_timer

dnj0496 692 April 19, 2017 03:18PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 299
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready