{module dev}include <sys/time.h> on 32bit linux cause segmentation fault?

Igor Sysoev igor at sysoev.ru
Thu May 26 09:18:11 MSD 2011

On Thu, May 26, 2011 at 11:36:42AM +0800, Conan wrote:
> hi, I'm wring a nginx module which is hooked at
> NGX_HTTP_ACCESS_PHASE. Segmentation fault happened when calling
> ngx_log_error(NGX_LOG_ERR, r->connection->log, "xxx")  in my module's
> handler(which will handle every request). I found r->connection->log = 0x0
>  when debug with gdb.
> On 64bit centos/ubuntu/macos module works well.  Segmentation fault seem
> only occurs on 32bit linux(ubuntu).
> When I comment out #include <sys/time.h>, segmentation fault disappeared.
> Attachment is my module's skeleton.

> #include <sys/time.h> 
> #include <ngx_config.h>
> #include <ngx_core.h>
> #include <ngx_http.h>

You should not include any files before ngx_config.h.
src/os/unix/ngx_linux_config.h does it for you:

#define _FILE_OFFSET_BITS  64

#include <sys/types.h>
#include <sys/time.h>

I believe, <sys/time.h> includes another file (may be <sys/types.h>
which depends on _FILE_OFFSET_BITS and your module is built with
32-bit off_t on 32-bit platform while nginx is build with 64-bit off_t.

Igor Sysoev

More information about the nginx-devel mailing list