Deleted
Added
nxt_fiber.c (6:6b3ce47b7663) | nxt_fiber.c (564:762f8c976ead) |
---|---|
1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#include <nxt_main.h> 8 --- 119 unchanged lines hidden (view full) --- 128 size_t size; 129 130 size = fib->stack_size + nxt_pagesize; 131 132 s = mmap(NULL, size, PROT_READ | PROT_WRITE, 133 MAP_PRIVATE | MAP_ANON | MAP_GROWSDOWN, -1, 0); 134 135 if (nxt_slow_path(s == MAP_FAILED)) { | 1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#include <nxt_main.h> 8 --- 119 unchanged lines hidden (view full) --- 128 size_t size; 129 130 size = fib->stack_size + nxt_pagesize; 131 132 s = mmap(NULL, size, PROT_READ | PROT_WRITE, 133 MAP_PRIVATE | MAP_ANON | MAP_GROWSDOWN, -1, 0); 134 135 if (nxt_slow_path(s == MAP_FAILED)) { |
136 nxt_log(task, NXT_LOG_CRIT, "fiber stack " 137 "mmap(%uz, MAP_PRIVATE|MAP_ANON|MAP_GROWSDOWN) failed %E", 138 size, nxt_errno); | 136 nxt_alert(task, "fiber stack " 137 "mmap(%uz, MAP_PRIVATE|MAP_ANON|MAP_GROWSDOWN) failed %E", 138 size, nxt_errno); |
139 140 return NULL; 141 } 142 143 if (nxt_slow_path(mprotect(s, nxt_pagesize, PROT_NONE) != 0)) { | 139 140 return NULL; 141 } 142 143 if (nxt_slow_path(mprotect(s, nxt_pagesize, PROT_NONE) != 0)) { |
144 nxt_log(task, NXT_LOG_CRIT, 145 "fiber stack mprotect(%uz, PROT_NONE) failed %E", 146 size, nxt_errno); | 144 nxt_alert(task, "fiber stack mprotect(%uz, PROT_NONE) failed %E", 145 size, nxt_errno); |
147 148 return NULL; 149 } 150 151 s += nxt_pagesize; 152 153 nxt_debug(task, "fiber stack mmap: %p", s); 154 --- 8 unchanged lines hidden (view full) --- 163 char *s; 164 size_t size; 165 166 size = fib->stack_size + nxt_pagesize; 167 168 s = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); 169 170 if (nxt_slow_path(s == MAP_FAILED)) { | 146 147 return NULL; 148 } 149 150 s += nxt_pagesize; 151 152 nxt_debug(task, "fiber stack mmap: %p", s); 153 --- 8 unchanged lines hidden (view full) --- 162 char *s; 163 size_t size; 164 165 size = fib->stack_size + nxt_pagesize; 166 167 s = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); 168 169 if (nxt_slow_path(s == MAP_FAILED)) { |
171 nxt_log(task, NXT_LOG_CRIT, 172 "fiber stack mmap(%uz, MAP_PRIVATE|MAP_ANON) failed %E", 173 size, nxt_errno); | 170 nxt_alert(task, "fiber stack mmap(%uz, MAP_PRIVATE|MAP_ANON) failed %E", 171 size, nxt_errno); |
174 175 return NULL; 176 } 177 178 if (nxt_slow_path(mprotect(s, nxt_pagesize, PROT_NONE) != 0)) { | 172 173 return NULL; 174 } 175 176 if (nxt_slow_path(mprotect(s, nxt_pagesize, PROT_NONE) != 0)) { |
179 nxt_log(task, NXT_LOG_CRIT, 180 "fiber stack mprotect(%uz, PROT_NONE) failed %E", 181 size, nxt_errno); | 177 nxt_alert(task, "fiber stack mprotect(%uz, PROT_NONE) failed %E", 178 size, nxt_errno); |
182 183 return NULL; 184 } 185 186 s += nxt_pagesize; 187 188 nxt_debug(task, "fiber stack mmap: %p", s); 189 --- 17 unchanged lines hidden (view full) --- 207static void 208nxt_fiber_switch_stack(nxt_fiber_t *fib, jmp_buf *parent) 209{ 210 ucontext_t uc; 211 212 nxt_debug(&fib->task, "fiber switch to stack: %p", fib->stack); 213 214 if (nxt_slow_path(getcontext(&uc) != 0)) { | 179 180 return NULL; 181 } 182 183 s += nxt_pagesize; 184 185 nxt_debug(task, "fiber stack mmap: %p", s); 186 --- 17 unchanged lines hidden (view full) --- 204static void 205nxt_fiber_switch_stack(nxt_fiber_t *fib, jmp_buf *parent) 206{ 207 ucontext_t uc; 208 209 nxt_debug(&fib->task, "fiber switch to stack: %p", fib->stack); 210 211 if (nxt_slow_path(getcontext(&uc) != 0)) { |
215 nxt_log(&fib->task, NXT_LOG_CRIT, "getcontext() failed"); | 212 nxt_alert(&fib->task, "getcontext() failed"); |
216 return; 217 } 218 219 uc.uc_link = NULL; 220 uc.uc_stack.ss_sp = fib->stack; 221 uc.uc_stack.ss_size = fib->stack_size; 222 223 makecontext(&uc, (void (*)(void)) nxt_fiber_trampoline, 4, 224 (uint32_t) ((uintptr_t) fib >> 32), 225 (uint32_t) ((uintptr_t) fib & 0xffffffff), 226 (uint32_t) ((uintptr_t) parent >> 32), 227 (uint32_t) ((uintptr_t) parent & 0xffffffff)); 228 229 setcontext(&uc); 230 | 213 return; 214 } 215 216 uc.uc_link = NULL; 217 uc.uc_stack.ss_sp = fib->stack; 218 uc.uc_stack.ss_size = fib->stack_size; 219 220 makecontext(&uc, (void (*)(void)) nxt_fiber_trampoline, 4, 221 (uint32_t) ((uintptr_t) fib >> 32), 222 (uint32_t) ((uintptr_t) fib & 0xffffffff), 223 (uint32_t) ((uintptr_t) parent >> 32), 224 (uint32_t) ((uintptr_t) parent & 0xffffffff)); 225 226 setcontext(&uc); 227 |
231 nxt_log(&fib->task, NXT_LOG_CRIT, "setcontext() failed"); | 228 nxt_alert(&fib->task, "setcontext() failed"); |
232} 233 234 235static void 236nxt_fiber_trampoline(uint32_t fh, uint32_t fl, uint32_t ph, uint32_t pl) 237{ 238 jmp_buf *parent; 239 nxt_task_t *task; --- 33 unchanged lines hidden (view full) --- 273static void 274nxt_fiber_switch_stack(nxt_fiber_t *fib, jmp_buf *parent) 275{ 276 ucontext_t uc; 277 278 nxt_debug(&fib->task, "fiber switch to stack: %p", fib->stack); 279 280 if (nxt_slow_path(getcontext(&uc) != 0)) { | 229} 230 231 232static void 233nxt_fiber_trampoline(uint32_t fh, uint32_t fl, uint32_t ph, uint32_t pl) 234{ 235 jmp_buf *parent; 236 nxt_task_t *task; --- 33 unchanged lines hidden (view full) --- 270static void 271nxt_fiber_switch_stack(nxt_fiber_t *fib, jmp_buf *parent) 272{ 273 ucontext_t uc; 274 275 nxt_debug(&fib->task, "fiber switch to stack: %p", fib->stack); 276 277 if (nxt_slow_path(getcontext(&uc) != 0)) { |
281 nxt_log(&fib->task, NXT_LOG_CRIT, "getcontext() failed"); | 278 nxt_alert(&fib->task, "getcontext() failed"); |
282 return; 283 } 284 285 uc.uc_link = NULL; 286 uc.uc_stack.ss_sp = fib->stack; 287 uc.uc_stack.ss_size = fib->stack_size; 288 289 makecontext(&uc, (void (*)(void)) nxt_fiber_trampoline, 2, fib, parent); 290 291 setcontext(&uc); 292 293#if !(NXT_SOLARIS) 294 /* Solaris declares setcontext() as __NORETURN. */ 295 | 279 return; 280 } 281 282 uc.uc_link = NULL; 283 uc.uc_stack.ss_sp = fib->stack; 284 uc.uc_stack.ss_size = fib->stack_size; 285 286 makecontext(&uc, (void (*)(void)) nxt_fiber_trampoline, 2, fib, parent); 287 288 setcontext(&uc); 289 290#if !(NXT_SOLARIS) 291 /* Solaris declares setcontext() as __NORETURN. */ 292 |
296 nxt_log(&fib->task, NXT_LOG_CRIT, "setcontext() failed"); | 293 nxt_alert(&fib->task, "setcontext() failed"); |
297#endif 298} 299 300 301static void 302nxt_fiber_trampoline(nxt_fiber_t *fib, jmp_buf *parent) 303{ 304 nxt_task_t *task; --- 165 unchanged lines hidden --- | 294#endif 295} 296 297 298static void 299nxt_fiber_trampoline(nxt_fiber_t *fib, jmp_buf *parent) 300{ 301 nxt_task_t *task; --- 165 unchanged lines hidden --- |