diff options
author | pav <pav@FreeBSD.org> | 2009-09-16 20:22:21 +0800 |
---|---|---|
committer | pav <pav@FreeBSD.org> | 2009-09-16 20:22:21 +0800 |
commit | 6104e583c3ff9e2ee62b5b5378651025b3fdf8d5 (patch) | |
tree | b08cded5058a015b4c75e024762f33bd6904c315 /www/apache22-peruser-mpm | |
parent | 3cefc94e56a5d7ac8682160985782d0cfc92df81 (diff) | |
download | freebsd-ports-gnome-6104e583c3ff9e2ee62b5b5378651025b3fdf8d5.tar.gz freebsd-ports-gnome-6104e583c3ff9e2ee62b5b5378651025b3fdf8d5.tar.zst freebsd-ports-gnome-6104e583c3ff9e2ee62b5b5378651025b3fdf8d5.zip |
- Add a patch to fix segfault on FreeBSD
- Bump to 2.2.13
PR: ports/138486
Submitted by: Jille Timmermans <jille@quis.cx> (maintainer)
Feature safe: yes
Diffstat (limited to 'www/apache22-peruser-mpm')
-rw-r--r-- | www/apache22-peruser-mpm/Makefile | 5 | ||||
-rw-r--r-- | www/apache22-peruser-mpm/files/httpd-2.2.3-peruser-0.3.0-dc3-r57.patch | 275 |
2 files changed, 278 insertions, 2 deletions
diff --git a/www/apache22-peruser-mpm/Makefile b/www/apache22-peruser-mpm/Makefile index ef96445947f1..3c6cb8929c5e 100644 --- a/www/apache22-peruser-mpm/Makefile +++ b/www/apache22-peruser-mpm/Makefile @@ -9,7 +9,7 @@ # $FreeBSD$ # -PORTREVISION= 3 +PORTREVISION= 4 MAINTAINER= jille@quis.cx @@ -18,8 +18,9 @@ MASTERDIR= ${.CURDIR}/../apache22 SLAVE_PORT_MPM= peruser EXTRA_PATCHES+= ${.CURDIR}/files/httpd-2.2.3-peruser-0.3.0.patch EXTRA_PATCHES+= ${.CURDIR}/files/httpd-2.2.3-peruser-0.3.0-dc3.patch +EXTRA_PATCHES+= ${.CURDIR}/files/httpd-2.2.3-peruser-0.3.0-dc3-r57.patch WITH_MPM= ${SLAVE_PORT_MPM} -SLAVE_DESIGNED_FOR= 2.2.11 # 2.2.3 to be honest, but works fine on 2.2.11 +SLAVE_DESIGNED_FOR= 2.2.13 # 2.2.3 to be honest, but works fine on 2.2.11 LATEST_LINK= apache22-peruser-mpm DESCR= ${.CURDIR}/pkg-descr diff --git a/www/apache22-peruser-mpm/files/httpd-2.2.3-peruser-0.3.0-dc3-r57.patch b/www/apache22-peruser-mpm/files/httpd-2.2.3-peruser-0.3.0-dc3-r57.patch new file mode 100644 index 000000000000..824821c821e2 --- /dev/null +++ b/www/apache22-peruser-mpm/files/httpd-2.2.3-peruser-0.3.0-dc3-r57.patch @@ -0,0 +1,275 @@ +--- server/mpm/experimental/peruser/peruser.c (revision 55) ++++ server/mpm/experimental/peruser/peruser.c (revision 57) +@@ -320,7 +320,7 @@ + * process. + */ + static apr_size_t child_info_size; +-static child_info *child_info_image; ++static child_info *child_info_image = NULL; + static child_grace_info_t *child_grace_info_table; + struct ap_ctable *ap_child_table; + +@@ -936,7 +936,7 @@ + msg.msg_iovlen = 5; + + cmsg = apr_palloc(pool, sizeof(*cmsg) + sizeof(sock_fd)); +- cmsg->cmsg_len = sizeof(*cmsg) + sizeof(sock_fd); ++ cmsg->cmsg_len = CMSG_LEN(sizeof(sock_fd)); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + +@@ -1034,9 +1034,10 @@ + ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL, "apr_os_sock_get"); + } + +- _DBG("child_num=%d sock=%ld sock_fd=%d\n", my_child_num, sock, sock_fd); ++ _DBG("child_num=%d sock=%ld sock_fd=%d", my_child_num, sock, sock_fd); + _DBG("type=%s %d", child_type_string(CHILD_INFO_TABLE[my_child_num].type), my_child_num); + ++#ifdef _OSD_POSIX + if (sock_fd >= FD_SETSIZE) + { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, +@@ -1048,6 +1049,7 @@ + _DBG("child_num=%d: exiting with error", my_child_num); + return; + } ++#endif + + if (CHILD_INFO_TABLE[my_child_num].sock_fd < 0) + { +@@ -1300,7 +1302,7 @@ + msg.msg_iovlen = 5; + + cmsg = apr_palloc(r->pool, sizeof(*cmsg) + sizeof(sock_fd)); +- cmsg->cmsg_len = sizeof(*cmsg) + sizeof(sock_fd); ++ cmsg->cmsg_len = CMSG_LEN(sizeof(sock_fd)); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + +@@ -1309,7 +1311,6 @@ + msg.msg_control = cmsg; + msg.msg_controllen = cmsg->cmsg_len; + +- + if (processor->status == CHILD_STATUS_STANDBY) + { + _DBG("Activating child #%d", processor->id); +@@ -1374,7 +1375,7 @@ + iov[3].iov_len = HUGE_STRING_LEN; + + cmsg = apr_palloc(ptrans, sizeof(*cmsg) + sizeof(trans_sock_fd)); +- cmsg->cmsg_len = sizeof(*cmsg) + sizeof(trans_sock_fd); ++ cmsg->cmsg_len = CMSG_LEN(sizeof(trans_sock_fd)); + + msg.msg_name = NULL; + msg.msg_namelen = 0; +@@ -1424,32 +1425,32 @@ + apr_cpystrn(headers, buff, header_len + 1); + _DBG("header_len=%d headers=\"%s\"", header_len, headers); + +-if (header_len) { +- _DBG("header_len > 0, we got a request", 0); +- /* -- store received data into an brigade and add +- it to the current transaction's pool -- */ +- bucket = apr_bucket_eos_create(alloc); +- APR_BRIGADE_INSERT_HEAD(bb, bucket); +- bucket = apr_bucket_socket_create(*trans_sock, alloc); +- APR_BRIGADE_INSERT_HEAD(bb, bucket); +- +- if (body_len) { +- body = (char*)&buff[header_len + 1]; +- _DBG("body_len=%d body=\"%s\"", body_len, body); +- +- bucket = apr_bucket_heap_create(body, body_len, NULL, alloc); ++ if (header_len) { ++ _DBG("header_len > 0, we got a request", 0); ++ /* -- store received data into an brigade and add ++ it to the current transaction's pool -- */ ++ bucket = apr_bucket_eos_create(alloc); + APR_BRIGADE_INSERT_HEAD(bb, bucket); ++ bucket = apr_bucket_socket_create(*trans_sock, alloc); ++ APR_BRIGADE_INSERT_HEAD(bb, bucket); ++ ++ if (body_len) { ++ body = (char*)&buff[header_len + 1]; ++ _DBG("body_len=%d body=\"%s\"", body_len, body); ++ ++ bucket = apr_bucket_heap_create(body, body_len, NULL, alloc); ++ APR_BRIGADE_INSERT_HEAD(bb, bucket); ++ } else { ++ _DBG("There is no body",0); ++ } ++ ++ bucket = apr_bucket_heap_create(headers, header_len, NULL, alloc); ++ ++ APR_BRIGADE_INSERT_HEAD(bb, bucket); ++ apr_pool_userdata_set(bb, "PERUSER_SOCKETS", NULL, ptrans); + } else { +- _DBG("There is no body",0); ++ _DBG("header_len == 0, we got a socket only", 0); + } +- +- bucket = apr_bucket_heap_create(headers, header_len, NULL, alloc); +- +- APR_BRIGADE_INSERT_HEAD(bb, bucket); +- apr_pool_userdata_set(bb, "PERUSER_SOCKETS", NULL, ptrans); +-} else { +- _DBG("header_len == 0, we got a socket only", 0); +-} + _DBG("returning 0", 0); + return 0; + } +@@ -2608,6 +2609,12 @@ + ++ap_my_generation; + ap_scoreboard_image->global->running_generation = ap_my_generation; + ++ /* cleanup sockets */ ++ for (i = 0; i < NUM_SENV; i++) { ++ close(SENV[i].input); ++ close(SENV[i].output); ++ } ++ + if (is_graceful) { + char char_of_death = AP_PERUSER_CHAR_OF_DEATH; + +@@ -2696,14 +2703,6 @@ + } + _DBG("Total children of %d leaving behind for graceful restart (%d living)", + grace_children, grace_children_alive); +- +- /* destroy server_env_image */ +- for (i = 0; i < NUM_SENV; i++) +- { +- close(SENV[i].input); +- close(SENV[i].output); +- } +- cleanup_server_environments(NULL); + } + else { + /* Kill 'em off */ +@@ -2861,40 +2860,41 @@ + return rv; + } + ++ if (!child_info_image) { ++ _DBG("Initializing child_info_table", 0); ++ child_info_size = tmp_server_limit * sizeof(child_info_t) + sizeof(apr_size_t); + +- _DBG("Initializing child_info_table", 0); +- child_info_size = tmp_server_limit * sizeof(child_info_t) + sizeof(apr_size_t); ++ rv = apr_shm_create(&child_info_shm, child_info_size, NULL, global_pool); + +- rv = apr_shm_create(&child_info_shm, child_info_size, NULL, global_pool); ++ /* if ((rv != APR_SUCCESS) && (rv != APR_ENOTIMPL)) { */ ++ if (rv != APR_SUCCESS) { ++ _DBG("shared memory creation failed", 0); + +-/* if ((rv != APR_SUCCESS) && (rv != APR_ENOTIMPL)) { */ +- if (rv != APR_SUCCESS) { +- _DBG("shared memory creation failed", 0); ++ ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL, ++ "Unable to create shared memory segment " ++ "(anonymous shared memory failure)"); ++ } ++ else if (rv == APR_ENOTIMPL) { ++ _DBG("anonymous shared memory not available", 0); ++ /* TODO: make up a filename and do name-based shmem */ ++ } + +- ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL, +- "Unable to create shared memory segment " +- "(anonymous shared memory failure)"); +- } +- else if (rv == APR_ENOTIMPL) { +- _DBG("anonymous shared memory not available", 0); +- /* TODO: make up a filename and do name-based shmem */ +- } ++ if (rv || !(shmem = apr_shm_baseaddr_get(child_info_shm))) { ++ _DBG("apr_shm_baseaddr_get() failed", 0); ++ return HTTP_INTERNAL_SERVER_ERROR; ++ } + +- if (rv || !(shmem = apr_shm_baseaddr_get(child_info_shm))) { +- _DBG("apr_shm_baseaddr_get() failed", 0); +- return HTTP_INTERNAL_SERVER_ERROR; ++ memset(shmem, 0, child_info_size); ++ child_info_image = (child_info*)apr_palloc(global_pool, sizeof(child_info)); ++ child_info_image->control = (child_info_control*)shmem; ++ shmem += sizeof(child_info_control); ++ child_info_image->table = (child_info_t*)shmem; + } + +- memset(shmem, 0, sizeof(child_info_size)); +- child_info_image = (child_info*)calloc(1, sizeof(child_info_size)); +- child_info_image->control = (child_info_control*)shmem; +- shmem += sizeof(child_info_control*); +- child_info_image->table = (child_info_t*)shmem; +- ++ _DBG("Clearing child_info_table"); + child_info_image->control->num = 0; + +- for (i = 0; i < tmp_server_limit; i++) +- { ++ for (i = 0; i < tmp_server_limit; i++) { + CHILD_INFO_TABLE[i].pid = 0; + CHILD_INFO_TABLE[i].senv = (server_env_t*)NULL; + CHILD_INFO_TABLE[i].type = CHILD_TYPE_UNKNOWN; +@@ -2927,25 +2927,23 @@ + return HTTP_INTERNAL_SERVER_ERROR; + } + +- memset(shmem, 0, sizeof(server_env_size)); +- server_env_image = (server_env*)calloc(1, sizeof(server_env_size)); ++ memset(shmem, 0, server_env_size); ++ server_env_image = (server_env*)apr_palloc(global_pool, sizeof(server_env)); + server_env_image->control = (server_env_control*)shmem; +- shmem += sizeof(server_env_control*); ++ shmem += sizeof(server_env_control); + server_env_image->table = (server_env_t*)shmem; + } +- +- if(restart_num <= 2) { +- _DBG("Cleaning server environments table"); + +- server_env_image->control->num = 0; +- for (i = 0; i < tmp_server_limit; i++) { +- SENV[i].processor_id = -1; +- SENV[i].uid = -1; +- SENV[i].gid = -1; +- SENV[i].chroot = NULL; +- SENV[i].input = -1; +- SENV[i].output = -1; +- } ++ _DBG("Clearing server environment table"); ++ server_env_image->control->num = 0; ++ ++ for (i = 0; i < tmp_server_limit; i++) { ++ SENV[i].processor_id = -1; ++ SENV[i].uid = -1; ++ SENV[i].gid = -1; ++ SENV[i].chroot = NULL; ++ SENV[i].input = -1; ++ SENV[i].output = -1; + } + + return OK; +@@ -3196,14 +3194,11 @@ + "Error: Directive %s> takes one argument", cmd->cmd->name); + } + +- /* Check for existing processors on first launch and between gracefuls */ +- if (restart_num == 1 || is_graceful) { +- server_env_t *old_senv = find_senv_by_name(senv.name); ++ server_env_t *old_senv = find_senv_by_name(senv.name); + +- if (old_senv) { +- return apr_psprintf(cmd->temp_pool, +- "Error: Processor %s already defined", senv.name); +- } ++ if (old_senv) { ++ return apr_psprintf(cmd->temp_pool, ++ "Error: Processor %s already defined", senv.name); + } + + senv.nice_lvl = 0; |