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 <dnj0...@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_ > mitigator_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= > 0x7fffffffe260) > 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