comparison src/core/ngx_shmtx.c @ 258:6ae1357b7b7c NGINX_0_4_14

nginx 0.4.14 *) Feature: the "proxy_pass_error_message" directive in IMAP/POP3 proxy. *) Feature: now configure detects system PCRE library on FreeBSD, Linux, and NetBSD. *) Bugfix: ngx_http_perl_module did not work with perl built with the threads support; bug appeared in 0.3.38. *) Bugfix: ngx_http_perl_module did not work if perl was called recursively. *) Bugfix: nginx ignored a host name in an request line. *) Bugfix: a worker process may got caught in an endless loop, if a FastCGI server sent too many data to the stderr. *) Bugfix: the $upstream_response_time variable may be negative if the system time was changed backward. *) Bugfix: the "Auth-Login-Attempt" parameter was not sent to IMAP/POP3 proxy authentication server when POP3 was used. *) Bugfix: a segmentation fault might occur if connect to IMAP/POP3 proxy authentication server failed.
author Igor Sysoev <http://sysoev.ru>
date Mon, 27 Nov 2006 00:00:00 +0300
parents 73e8476f9142
children 3dbecd747fbb
comparison
equal deleted inserted replaced
257:0e566ee1bcd5 258:6ae1357b7b7c
10 10
11 #if (NGX_HAVE_ATOMIC_OPS) 11 #if (NGX_HAVE_ATOMIC_OPS)
12 12
13 13
14 ngx_int_t 14 ngx_int_t
15 ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name, ngx_log_t *log) 15 ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name)
16 { 16 {
17 mtx->lock = addr; 17 mtx->lock = addr;
18 18
19 return NGX_OK; 19 return NGX_OK;
20 } 20 }
21 21
22 #else 22 #else
23 23
24 24
25 ngx_int_t 25 ngx_int_t
26 ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name, ngx_log_t *log) 26 ngx_shmtx_create(ngx_shmtx_t *mtx, void *addr, u_char *name)
27 { 27 {
28 if (mtx->name) { 28 if (mtx->name) {
29 29
30 if (ngx_strcmp(name, mtx->name) == 0) { 30 if (ngx_strcmp(name, mtx->name) == 0) {
31 mtx->name = name; 31 mtx->name = name;
32 mtx->log = log;
33
34 return NGX_OK; 32 return NGX_OK;
35 } 33 }
36 34
37 ngx_shmtx_destory(mtx); 35 ngx_shmtx_destory(mtx);
38 } 36 }
39 37
40 mtx->fd = ngx_open_file(name, NGX_FILE_RDWR, NGX_FILE_CREATE_OR_OPEN); 38 mtx->fd = ngx_open_file(name, NGX_FILE_RDWR, NGX_FILE_CREATE_OR_OPEN);
41 39
42 if (mtx->fd == NGX_INVALID_FILE) { 40 if (mtx->fd == NGX_INVALID_FILE) {
43 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, 41 ngx_log_error(NGX_LOG_EMERG, ngx_cycle->log, ngx_errno,
44 ngx_open_file_n " \"%s\" failed", name); 42 ngx_open_file_n " \"%s\" failed", name);
45 return NGX_ERROR; 43 return NGX_ERROR;
46 } 44 }
47 45
48 if (ngx_delete_file(name) == NGX_FILE_ERROR) { 46 if (ngx_delete_file(name) == NGX_FILE_ERROR) {
49 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, 47 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_errno,
50 ngx_delete_file_n " \"%s\" failed", name); 48 ngx_delete_file_n " \"%s\" failed", name);
51 } 49 }
52 50
53 mtx->name = name; 51 mtx->name = name;
54 mtx->log = log;
55 52
56 return NGX_OK; 53 return NGX_OK;
57 } 54 }
58 55
59 56
60 void 57 void
61 ngx_shmtx_destory(ngx_shmtx_t *mtx) 58 ngx_shmtx_destory(ngx_shmtx_t *mtx)
62 { 59 {
63 if (ngx_close_file(mtx->fd) == NGX_FILE_ERROR) { 60 if (ngx_close_file(mtx->fd) == NGX_FILE_ERROR) {
64 ngx_log_error(NGX_LOG_ALERT, mtx->log, ngx_errno, 61 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_errno,
65 ngx_close_file_n " \"%s\" failed", mtx->name); 62 ngx_close_file_n " \"%s\" failed", mtx->name);
66 } 63 }
67 } 64 }
68 65
69 66