aboutsummaryrefslogtreecommitdiff
path: root/www/apache22-peruser-mpm
diff options
context:
space:
mode:
authorPav Lucistnik <pav@FreeBSD.org>2009-09-16 12:22:21 +0000
committerPav Lucistnik <pav@FreeBSD.org>2009-09-16 12:22:21 +0000
commit5335a3e7d15158a79ec4d00b5c9a43dae1b65808 (patch)
tree135e13764a1a30ddfb2116734a7ee04502328779 /www/apache22-peruser-mpm
parent81eeec9efed8d0c8f6320831d0ec4209467fc38b (diff)
downloadports-5335a3e7d15158a79ec4d00b5c9a43dae1b65808.tar.gz
ports-5335a3e7d15158a79ec4d00b5c9a43dae1b65808.zip
Notes
Diffstat (limited to 'www/apache22-peruser-mpm')
-rw-r--r--www/apache22-peruser-mpm/Makefile5
-rw-r--r--www/apache22-peruser-mpm/files/httpd-2.2.3-peruser-0.3.0-dc3-r57.patch275
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;