annotate src/core/ngx_spinlock.c @ 591:8c0cdd81580e release-0.3.17

nginx-0.3.17-RELEASE import *) Change: now on Linux configure checks the presence of epoll and sendfile64() in kernel. *) Feature: the "map" directive supports domain names in the ".domain.tld" form. *) Bugfix: the timeouts were not used in SSL handshake; the bug had appeared in 0.2.4. *) Bugfix: in the HTTPS protocol in the "proxy_pass" directive. *) Bugfix: when the HTTPS protocol was used in the "proxy_pass" directive the port 80 was used by default.
author Igor Sysoev <igor@sysoev.ru>
date Sun, 18 Dec 2005 16:02:44 +0000
parents 9c2f3ed7a247
children 3f8a2132b93d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
5
373
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 363
diff changeset
6
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 363
diff changeset
7 #include <ngx_config.h>
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 363
diff changeset
8 #include <ngx_core.h>
363
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
11 /*
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
12 * TODO: the P4 optimized assembler version with the "pause" operation
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
13 */
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
14
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
15 void
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
16 ngx_spinlock(ngx_atomic_t *lock, ngx_uint_t spin)
363
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 {
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
18
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
19 #if (NGX_HAVE_ATOMIC_OPS)
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
20
373
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 363
diff changeset
21 ngx_uint_t tries;
363
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 tries = 0;
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 for ( ;; ) {
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 if (*lock) {
373
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 363
diff changeset
28 if (ngx_ncpu > 1 && tries++ < spin) {
363
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 continue;
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 }
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31
373
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 363
diff changeset
32 ngx_sched_yield();
018569a8f09c nginx-0.0.7-2004-06-30-19:30:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 363
diff changeset
33
363
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 tries = 0;
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 } else {
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 if (ngx_atomic_cmp_set(lock, 0, 1)) {
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 return;
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 }
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 }
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 }
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
42
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
43 #else
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
44
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
45 #if (NGX_THREADS)
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
46
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
47 #error ngx_spinlock() or ngx_atomic_cmp_set() are not defined !
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
48
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
49 #endif
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
50
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
51 #endif
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 373
diff changeset
52
363
f2755a2885c8 nginx-0.0.7-2004-06-21-23:22:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 }