Mercurial > hg > nginx
view src/misc/ngx_google_perftools_module.c @ 9228:c363ad6b3b23
Adjusted logging level of ENOENT connect() errors.
Connecting to unix sockets might legitimately return ENOENT if the socket
does not exists. Changed logging level of such errors from the default
one for unknown errors, "crit", to "error".
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 01 Mar 2024 05:42:31 +0300 |
parents | a27e0c7e198c |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #include <ngx_config.h> #include <ngx_core.h> /* * declare Profiler interface here because * <google/profiler.h> is C++ header file */ int ProfilerStart(u_char* fname); void ProfilerStop(void); void ProfilerRegisterThread(void); static void *ngx_google_perftools_create_conf(ngx_cycle_t *cycle); static ngx_int_t ngx_google_perftools_worker(ngx_cycle_t *cycle); typedef struct { ngx_str_t profiles; } ngx_google_perftools_conf_t; static ngx_command_t ngx_google_perftools_commands[] = { { ngx_string("google_perftools_profiles"), NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, ngx_conf_set_str_slot, 0, offsetof(ngx_google_perftools_conf_t, profiles), NULL }, ngx_null_command }; static ngx_core_module_t ngx_google_perftools_module_ctx = { ngx_string("google_perftools"), ngx_google_perftools_create_conf, NULL }; ngx_module_t ngx_google_perftools_module = { NGX_MODULE_V1, &ngx_google_perftools_module_ctx, /* module context */ ngx_google_perftools_commands, /* module directives */ NGX_CORE_MODULE, /* module type */ NULL, /* init master */ NULL, /* init module */ ngx_google_perftools_worker, /* init process */ NULL, /* init thread */ NULL, /* exit thread */ NULL, /* exit process */ NULL, /* exit master */ NGX_MODULE_V1_PADDING }; static void * ngx_google_perftools_create_conf(ngx_cycle_t *cycle) { ngx_google_perftools_conf_t *gptcf; gptcf = ngx_pcalloc(cycle->pool, sizeof(ngx_google_perftools_conf_t)); if (gptcf == NULL) { return NULL; } /* * set by ngx_pcalloc() * * gptcf->profiles = { 0, NULL }; */ return gptcf; } static ngx_int_t ngx_google_perftools_worker(ngx_cycle_t *cycle) { u_char *profile; ngx_google_perftools_conf_t *gptcf; gptcf = (ngx_google_perftools_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_google_perftools_module); if (gptcf->profiles.len == 0) { return NGX_OK; } profile = ngx_alloc(gptcf->profiles.len + NGX_INT_T_LEN + 2, cycle->log); if (profile == NULL) { return NGX_OK; } if (getenv("CPUPROFILE")) { /* disable inherited Profiler enabled in master process */ ProfilerStop(); } ngx_sprintf(profile, "%V.%d%Z", &gptcf->profiles, ngx_pid); if (ProfilerStart(profile)) { /* start ITIMER_PROF timer */ ProfilerRegisterThread(); } else { ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_errno, "ProfilerStart(%s) failed", profile); } ngx_free(profile); return NGX_OK; } /* ProfilerStop() is called on Profiler destruction */