view src/os/unix/ngx_shared.c @ 28:7ca9bdc82b3f NGINX_0_1_14

nginx 0.1.14 *) Feature: the autoconfiguration directives: --http-client-body-temp-path=PATH, --http-proxy-temp-path=PATH, and --http-fastcgi-temp-path=PATH *) Change: the directory name for the temporary files with the client request body is specified by directive client_body_temp_path, by default it is <prefix>/client_body_temp. *) Feature: the ngx_http_fastcgi_module and the directives: fastcgi_pass, fastcgi_root, fastcgi_index, fastcgi_params, fastcgi_connect_timeout, fastcgi_send_timeout, fastcgi_read_timeout, fastcgi_send_lowat, fastcgi_header_buffer_size, fastcgi_buffers, fastcgi_busy_buffers_size, fastcgi_temp_path, fastcgi_max_temp_file_size, fastcgi_temp_file_write_size, fastcgi_next_upstream, and fastcgi_x_powered_by. *) Bugfix: the "[alert] zero size buf" error; bug appeared in 0.1.3. *) Change: the URI must be specified after the host name in the proxy_pass directive. *) Change: the %3F symbol in the URI was considered as the argument string start. *) Feature: the unix domain sockets support in the ngx_http_proxy_module. *) Feature: the ssl_engine and ssl_ciphers directives. Thanks to Sergey Skvortsov for SSL-accelerator.
author Igor Sysoev <http://sysoev.ru>
date Tue, 18 Jan 2005 00:00:00 +0300
parents 6f8b0dc0f8dd
children
line wrap: on
line source


/*
 * Copyright (C) Igor Sysoev
 */


#include <ngx_config.h>
#include <ngx_core.h>


#if (NGX_HAVE_MAP_ANON)

void *ngx_create_shared_memory(size_t size, ngx_log_t *log)
{
    void  *p;

    p = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);

    if (p == MAP_FAILED) {
        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                      "mmap(MAP_ANON|MAP_SHARED, %uz) failed", size);
        return NULL;
    }

    return p;
}

#elif (NGX_HAVE_MAP_DEVZERO)

void *ngx_create_shared_memory(size_t size, ngx_log_t *log)
{
    void      *p;
    ngx_fd_t   fd;

    fd = open("/dev/zero", O_RDWR);

    if (fd == -1) {
        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                      "open(\"/dev/zero\") failed");
        return NULL;
    }

    p = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

    if (p == MAP_FAILED) {
        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                      "mmap(/dev/zero, MAP_SHARED, %uz) failed", size);
        p = NULL;
    }

    if (close(fd) == -1) {
        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                      "close(\"/dev/zero\") failed");
    }

    return p;
}

#elif (NGX_HAVE_SYSVSHM)

#include <sys/ipc.h>
#include <sys/shm.h>


void *ngx_create_shared_memory(size_t size, ngx_log_t *log)
{
    int    id;
    void  *p;

    id = shmget(IPC_PRIVATE, size, (SHM_R|SHM_W|IPC_CREAT));

    if (id == -1) {
        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                      "shmget(%uz) failed", size);
        return NULL;
    }

    ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0, "shmget id: %d", id);

    p = shmat(id, NULL, 0);

    if (p == (void *) -1) {
        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "shmat() failed");
        p = NULL;
    }

    if (shmctl(id, IPC_RMID, NULL) == -1) {
        ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "shmctl(IPC_RMID) failed");
        p = NULL;
    }

    return p;
}

#endif