# HG changeset patch # User Igor Sysoev # Date 1319471208 0 # Node ID 1b779cb69dc83b959df030fa4fd47b248cd97694 # Parent 2dd6c7cb211a04cbe5b8c8c27e0bdd52a9ab80d9 malloc() debugging on MacOSX. diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/core/nginx.c --- a/src/core/nginx.c Mon Oct 24 12:59:01 2011 +0000 +++ b/src/core/nginx.c Mon Oct 24 15:46:48 2011 +0000 @@ -203,9 +203,7 @@ ngx_cycle_t *cycle, init_cycle; ngx_core_conf_t *ccf; -#if (NGX_FREEBSD) ngx_debug_init(); -#endif if (ngx_strerror_init() != NGX_OK) { return 1; diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/core/ngx_slab.c --- a/src/core/ngx_slab.c Mon Oct 24 12:59:01 2011 +0000 +++ b/src/core/ngx_slab.c Mon Oct 24 15:46:48 2011 +0000 @@ -46,10 +46,10 @@ #else -#if (NGX_FREEBSD) +#if (NGX_HAVE_DEBUG_MALLOC) #define ngx_slab_junk(p, size) \ - if (ngx_freebsd_debug_malloc) ngx_memset(p, 0xD0, size) + if (ngx_debug_malloc) ngx_memset(p, 0xD0, size) #else diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_darwin.h --- a/src/os/unix/ngx_darwin.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_darwin.h Mon Oct 24 15:46:48 2011 +0000 @@ -8,6 +8,7 @@ #define _NGX_DARWIN_H_INCLUDED_ +void ngx_debug_init(void); ngx_chain_t *ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit); @@ -15,5 +16,7 @@ extern int ngx_darwin_hw_ncpu; extern u_long ngx_darwin_net_inet_tcp_sendspace; +extern ngx_uint_t ngx_debug_malloc; + #endif /* _NGX_DARWIN_H_INCLUDED_ */ diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_darwin_config.h --- a/src/os/unix/ngx_darwin_config.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_darwin_config.h Mon Oct 24 15:46:48 2011 +0000 @@ -87,6 +87,7 @@ #define NGX_HAVE_OS_SPECIFIC_INIT 1 +#define NGX_HAVE_DEBUG_MALLOC 1 extern char **environ; diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_darwin_init.c --- a/src/os/unix/ngx_darwin_init.c Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_darwin_init.c Mon Oct 24 15:46:48 2011 +0000 @@ -14,6 +14,8 @@ int ngx_darwin_kern_ipc_somaxconn; u_long ngx_darwin_net_inet_tcp_sendspace; +ngx_uint_t ngx_debug_malloc; + static ngx_os_io_t ngx_darwin_io = { ngx_unix_recv, @@ -55,6 +57,34 @@ }; +void +ngx_debug_init() +{ +#if (NGX_DEBUG_MALLOC) + + /* + * MacOSX 10.6, 10.7: MallocScribble fills freed memory with 0x55 + * and fills allocated memory with 0xAA. + * MacOSX 10.4, 10.5: MallocScribble fills freed memory with 0x55, + * MallocPreScribble fills allocated memory with 0xAA. + * MacOSX 10.3: MallocScribble fills freed memory with 0x55, + * and no way to fill allocated memory. + */ + + setenv("MallocScribble", "1", 0); + + ngx_debug_malloc = 1; + +#else + + if (getenv("MallocScribble")) { + ngx_debug_malloc = 1; + } + +#endif +} + + ngx_int_t ngx_os_specific_init(ngx_log_t *log) { diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_freebsd.h --- a/src/os/unix/ngx_freebsd.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_freebsd.h Mon Oct 24 15:46:48 2011 +0000 @@ -8,6 +8,7 @@ #define _NGX_FREEBSD_H_INCLUDED_ +void ngx_debug_init(void); ngx_chain_t *ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit); @@ -17,7 +18,7 @@ extern ngx_uint_t ngx_freebsd_sendfile_nbytes_bug; extern ngx_uint_t ngx_freebsd_use_tcp_nopush; -extern ngx_uint_t ngx_freebsd_debug_malloc; +extern ngx_uint_t ngx_debug_malloc; #endif /* _NGX_FREEBSD_H_INCLUDED_ */ diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_freebsd_config.h --- a/src/os/unix/ngx_freebsd_config.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_freebsd_config.h Mon Oct 24 15:46:48 2011 +0000 @@ -109,6 +109,7 @@ #define NGX_HAVE_OS_SPECIFIC_INIT 1 +#define NGX_HAVE_DEBUG_MALLOC 1 extern char **environ; diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_freebsd_init.c --- a/src/os/unix/ngx_freebsd_init.c Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_freebsd_init.c Mon Oct 24 15:46:48 2011 +0000 @@ -22,7 +22,8 @@ ngx_uint_t ngx_freebsd_sendfile_nbytes_bug; ngx_uint_t ngx_freebsd_use_tcp_nopush; -ngx_uint_t ngx_freebsd_debug_malloc; + +ngx_uint_t ngx_debug_malloc; static ngx_os_io_t ngx_freebsd_io = { @@ -80,7 +81,7 @@ malloc_options = "J"; #endif - ngx_freebsd_debug_malloc = 1; + ngx_debug_malloc = 1; #else char *mo; @@ -88,7 +89,7 @@ mo = getenv("MALLOC_OPTIONS"); if (mo && ngx_strchr(mo, 'J')) { - ngx_freebsd_debug_malloc = 1; + ngx_debug_malloc = 1; } #endif } diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_linux_config.h --- a/src/os/unix/ngx_linux_config.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_linux_config.h Mon Oct 24 15:46:48 2011 +0000 @@ -108,6 +108,7 @@ #define NGX_HAVE_OS_SPECIFIC_INIT 1 +#define ngx_debug_init() extern char **environ; diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_os.h --- a/src/os/unix/ngx_os.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_os.h Mon Oct 24 15:46:48 2011 +0000 @@ -31,7 +31,6 @@ } ngx_os_io_t; -void ngx_debug_init(void); ngx_int_t ngx_os_init(ngx_log_t *log); void ngx_os_status(ngx_log_t *log); ngx_int_t ngx_os_specific_init(ngx_log_t *log); diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_posix_config.h --- a/src/os/unix/ngx_posix_config.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_posix_config.h Mon Oct 24 15:46:48 2011 +0000 @@ -125,6 +125,8 @@ #define NGX_LISTEN_BACKLOG 511 +#define ngx_debug_init() + #if (__FreeBSD__) && (__FreeBSD_version < 400017) diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/unix/ngx_solaris_config.h --- a/src/os/unix/ngx_solaris_config.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/unix/ngx_solaris_config.h Mon Oct 24 15:46:48 2011 +0000 @@ -98,6 +98,7 @@ #define NGX_HAVE_OS_SPECIFIC_INIT 1 +#define ngx_debug_init() extern char **environ; diff -r 2dd6c7cb211a -r 1b779cb69dc8 src/os/win32/ngx_win32_config.h --- a/src/os/win32/ngx_win32_config.h Mon Oct 24 12:59:01 2011 +0000 +++ b/src/os/win32/ngx_win32_config.h Mon Oct 24 15:46:48 2011 +0000 @@ -182,6 +182,7 @@ #define ngx_random rand +#define ngx_debug_init() #endif /* _NGX_WIN32_CONFIG_H_INCLUDED_ */