Mercurial > hg > nginx
comparison src/os/unix/ngx_freebsd_rfork_thread.h @ 376:d0451e402e27
nginx-0.0.7-2004-07-05-10:55:54 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 05 Jul 2004 06:55:54 +0000 |
parents | |
children | 73688d5d7fc3 |
comparison
equal
deleted
inserted
replaced
375:744ccb59062d | 376:d0451e402e27 |
---|---|
1 #ifndef _NGX_FREEBSD_RFORK_THREAD_H_INCLUDED_ | |
2 #define _NGX_FREEBSD_RFORK_THREAD_H_INCLUDED_ | |
3 | |
4 | |
5 #include <sys/ipc.h> | |
6 #include <sys/sem.h> | |
7 #include <sched.h> | |
8 | |
9 typedef pid_t ngx_tid_t; | |
10 | |
11 #undef ngx_log_pid | |
12 #define ngx_log_pid ngx_thread_self() | |
13 #define ngx_log_tid 0 | |
14 | |
15 #define TID_T_FMT PID_T_FMT | |
16 | |
17 | |
18 #define NGX_MUTEX_LIGHT 1 | |
19 | |
20 #define NGX_MUTEX_LOCK_BUSY 0x80000000 | |
21 | |
22 typedef volatile struct { | |
23 ngx_atomic_t lock; | |
24 ngx_log_t *log; | |
25 int semid; | |
26 } ngx_mutex_t; | |
27 | |
28 | |
29 #define NGX_CV_SIGNAL 64 | |
30 | |
31 typedef struct { | |
32 int signo; | |
33 int kq; | |
34 ngx_tid_t tid; | |
35 ngx_log_t *log; | |
36 } ngx_cond_t; | |
37 | |
38 | |
39 #define ngx_thread_sigmask(how, set, oset) \ | |
40 (sigprocmask(how, set, oset) == -1) ? ngx_errno : 0 | |
41 | |
42 #define ngx_thread_sigmask_n "sigprocmask()" | |
43 | |
44 #define ngx_thread_join(t, p) | |
45 | |
46 #define ngx_setthrtitle(n) setproctitle(n) | |
47 | |
48 | |
49 extern char *ngx_freebsd_kern_usrstack; | |
50 extern size_t ngx_thread_stack_size; | |
51 | |
52 | |
53 static inline int ngx_gettid() | |
54 { | |
55 char *sp; | |
56 | |
57 if (ngx_thread_stack_size == 0) { | |
58 return 0; | |
59 } | |
60 | |
61 #if ( __i386__ ) | |
62 | |
63 __asm__ volatile ("mov %%esp, %0" : "=q" (sp)); | |
64 | |
65 #elif ( __amd64__ ) | |
66 | |
67 __asm__ volatile ("mov %%rsp, %0" : "=q" (sp)); | |
68 | |
69 #else | |
70 | |
71 #error "rfork()ed threads are not supported on this platform" | |
72 | |
73 #endif | |
74 | |
75 return (ngx_freebsd_kern_usrstack - sp) / ngx_thread_stack_size; | |
76 } | |
77 | |
78 | |
79 ngx_tid_t ngx_thread_self(); | |
80 #define ngx_thread_main() (ngx_gettid() == 0) | |
81 | |
82 | |
83 #define ngx_mutex_trylock(m) ngx_mutex_dolock(m, 1) | |
84 #define ngx_mutex_lock(m) ngx_mutex_dolock(m, 0) | |
85 ngx_int_t ngx_mutex_dolock(ngx_mutex_t *m, ngx_int_t try); | |
86 ngx_int_t ngx_mutex_unlock(ngx_mutex_t *m); | |
87 | |
88 | |
89 typedef int (*ngx_rfork_thread_func_pt)(void *arg); | |
90 | |
91 | |
92 | |
93 #endif /* _NGX_FREEBSD_RFORK_THREAD_H_INCLUDED_ */ |