Mercurial > hg > nginx
view src/os/unix/ngx_thread_id.c @ 7516:36c52a0f6ded
Perl: disabled not_modified filter (ticket #1786).
Embedded perl does not set any request fields needed for conditional
requests processing. Further, filter finalization in the not_modified
filter can cause segmentation faults due to cleared ctx as in
ticket #1786.
Before 5fb1e57c758a (1.7.3) the not_modified filter was implicitly disabled
for perl responses, as r->headers_out.last_modified_time was -1. This
change restores this behaviour by using the explicit r->disable_not_modified
flag.
Note that this patch doesn't try to address perl module robustness against
filter finalization and other errors returned from filter chains. It should
be eventually reworked to handle errors instead of ignoring them.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 17 Jun 2019 19:48:56 +0300 |
parents | 466bd63b63d1 |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_thread_pool.h> #if (NGX_LINUX) /* * Linux thread id is a pid of thread created by clone(2), * glibc does not provide a wrapper for gettid(). */ ngx_tid_t ngx_thread_tid(void) { return syscall(SYS_gettid); } #elif (NGX_FREEBSD) && (__FreeBSD_version >= 900031) #include <pthread_np.h> ngx_tid_t ngx_thread_tid(void) { return pthread_getthreadid_np(); } #elif (NGX_DARWIN) /* * MacOSX thread has two thread ids: * * 1) MacOSX 10.6 (Snow Leoprad) has pthread_threadid_np() returning * an uint64_t value, which is obtained using the __thread_selfid() * syscall. It is a number above 300,000. */ ngx_tid_t ngx_thread_tid(void) { uint64_t tid; (void) pthread_threadid_np(NULL, &tid); return tid; } /* * 2) Kernel thread mach_port_t returned by pthread_mach_thread_np(). * It is a number in range 100-100,000. * * return pthread_mach_thread_np(pthread_self()); */ #else ngx_tid_t ngx_thread_tid(void) { return (uint64_t) (uintptr_t) pthread_self(); } #endif