Mercurial > hg > nginx
view src/os/win32/ngx_thread.h @ 4665:25611746fee7 stable-1.2
Merge of r4619: accept moderation on EMFILE/ENFILE.
In case of EMFILE/ENFILE returned from accept() we disable accept events,
and (in case of no accept mutex used) arm timer to re-enable them later.
With accept mutex we just drop it, and rely on normal accept mutex handling
to re-enable accept events once it's acquired again.
As we now handle errors in question, logging level was changed to "crit"
(instead of "alert" used for unknown errors).
Note: the code might call ngx_enable_accept_events() multiple times if
there are many listen sockets. The ngx_enable_accept_events() function was
modified to check if connection is already active (via c->read->active) and
skip it then, thus making multiple calls safe.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 04 Jun 2012 11:10:36 +0000 |
parents | d620f497c50f |
children | 94ce52db3367 |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_THREAD_H_INCLUDED_ #define _NGX_THREAD_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef HANDLE ngx_tid_t; typedef DWORD ngx_tls_key_t; typedef DWORD ngx_thread_value_t; typedef struct { HANDLE mutex; ngx_log_t *log; } ngx_mutex_t; ngx_err_t ngx_create_thread(ngx_tid_t *tid, ngx_thread_value_t (__stdcall *func)(void *arg), void *arg, ngx_log_t *log); ngx_int_t ngx_init_threads(int n, size_t size, ngx_cycle_t *cycle); ngx_err_t ngx_thread_key_create(ngx_tls_key_t *key); #define ngx_thread_key_create_n "TlsAlloc()" ngx_err_t ngx_thread_set_tls(ngx_tls_key_t *key, void *data); #define ngx_thread_set_tls_n "TlsSetValue()" #define ngx_thread_get_tls TlsGetValue #define ngx_thread_volatile volatile #define ngx_log_tid GetCurrentThreadId() #define NGX_TID_T_FMT "%ud" ngx_mutex_t *ngx_mutex_init(ngx_log_t *log, ngx_uint_t flags); void ngx_mutex_lock(ngx_mutex_t *m); ngx_int_t ngx_mutex_trylock(ngx_mutex_t *m); void ngx_mutex_unlock(ngx_mutex_t *m); /* STUB */ #define NGX_MUTEX_LIGHT 0 /**/ extern ngx_int_t ngx_threads_n; #endif /* _NGX_THREAD_H_INCLUDED_ */