summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--www-apache/mod_fcgid/ChangeLog7
-rw-r--r--www-apache/mod_fcgid/files/mod_fcgid-2.1-apr_shm_remove.patch98
-rw-r--r--www-apache/mod_fcgid/mod_fcgid-2.1.ebuild14
3 files changed, 113 insertions, 6 deletions
diff --git a/www-apache/mod_fcgid/ChangeLog b/www-apache/mod_fcgid/ChangeLog
index 604ac4b6c33d..ce6130ea5fc8 100644
--- a/www-apache/mod_fcgid/ChangeLog
+++ b/www-apache/mod_fcgid/ChangeLog
@@ -1,6 +1,11 @@
# ChangeLog for www-apache/mod_fcgid
# Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/www-apache/mod_fcgid/ChangeLog,v 1.26 2007/03/13 16:19:35 phreak Exp $
+# $Header: /var/cvsroot/gentoo-x86/www-apache/mod_fcgid/ChangeLog,v 1.27 2007/03/14 19:17:40 phreak Exp $
+
+ 14 Mar 2007; Christian Heim <phreak@gentoo.org>
+ +files/mod_fcgid-2.1-apr_shm_remove.patch, mod_fcgid-2.1.ebuild:
+ Finally fixing #170352, thanks to Xavier again (for pointing me at the
+ upstream patch, that removed the weird apr_shm_remove stuff).
13 Mar 2007; Christian Heim <phreak@gentoo.org> mod_fcgid-2.1.ebuild:
Looks like newer fcgid needs a newer version of apr, thus forcing
diff --git a/www-apache/mod_fcgid/files/mod_fcgid-2.1-apr_shm_remove.patch b/www-apache/mod_fcgid/files/mod_fcgid-2.1-apr_shm_remove.patch
new file mode 100644
index 000000000000..45dba362b2f8
--- /dev/null
+++ b/www-apache/mod_fcgid/files/mod_fcgid-2.1-apr_shm_remove.patch
@@ -0,0 +1,98 @@
+--- arch/unix/fcgid_proctbl_unix.c.prev 2007-02-16 03:34:41.000000000 +0100
++++ arch/unix/fcgid_proctbl_unix.c 2007-03-14 19:05:54.000000000 +0100
+@@ -1,4 +1,5 @@
+ #include "fcgid_proctbl.h"
++#include "apr_version.h"
+ #include "apr_shm.h"
+ #include "apr_global_mutex.h"
+ #include "fcgid_global.h"
+@@ -18,6 +19,89 @@
+ static fcgid_global_share *g_global_share = NULL; /* global information */
+ static size_t g_table_size = FCGID_PROC_TABLE_SIZE;
+
++/* apr version 0.x not support apr_shm_remove, I have to copy it from apr version 1.x */
++#if (APR_MAJOR_VERSION < 1)
++#ifdef HAVE_SYS_MMAN_H
++#include <sys/mman.h>
++#endif
++#ifdef HAVE_SYS_IPC_H
++#include <sys/ipc.h>
++#endif
++#ifdef HAVE_SYS_MUTEX_H
++#include <sys/mutex.h>
++#endif
++#ifdef HAVE_SYS_SHM_H
++#include <sys/shm.h>
++#endif
++#if !defined(SHM_R)
++#define SHM_R 0400
++#endif
++#if !defined(SHM_W)
++#define SHM_W 0200
++#endif
++#ifdef HAVE_SYS_FILE_H
++#include <sys/file.h>
++#endif
++
++static apr_status_t apr_shm_remove(const char *filename, apr_pool_t * pool)
++{
++#if APR_USE_SHMEM_SHMGET
++ apr_status_t status;
++ apr_file_t *file;
++ key_t shmkey;
++ int shmid;
++#endif
++
++#if APR_USE_SHMEM_MMAP_TMP
++ return apr_file_remove(filename, pool);
++#endif
++#if APR_USE_SHMEM_MMAP_SHM
++ if (shm_unlink(filename) == -1) {
++ return errno;
++ }
++ return APR_SUCCESS;
++#endif
++#if APR_USE_SHMEM_SHMGET
++ /* Presume that the file already exists; just open for writing */
++ status = apr_file_open(&file, filename, APR_WRITE,
++ APR_OS_DEFAULT, pool);
++ if (status) {
++ return status;
++ }
++
++ /* ftok() (on solaris at least) requires that the file actually
++ * exist before calling ftok(). */
++ shmkey = ftok(filename, 1);
++ if (shmkey == (key_t) - 1) {
++ goto shm_remove_failed;
++ }
++
++ apr_file_close(file);
++
++ if ((shmid = shmget(shmkey, 0, SHM_R | SHM_W)) < 0) {
++ goto shm_remove_failed;
++ }
++
++ /* Indicate that the segment is to be destroyed as soon
++ * as all processes have detached. This also disallows any
++ * new attachments to the segment. */
++ if (shmctl(shmid, IPC_RMID, NULL) == -1) {
++ goto shm_remove_failed;
++ }
++ return apr_file_remove(filename, pool);
++
++ shm_remove_failed:
++ status = errno;
++ /* ensure the file has been removed anyway. */
++ apr_file_remove(filename, pool);
++ return status;
++#endif
++
++ /* No support for anonymous shm */
++ return APR_ENOTIMPL;
++}
++#endif /* APR_MAJOR_VERSION<1 */
++
+ apr_status_t
+ proctable_post_config(server_rec * main_server, apr_pool_t * configpool)
+ {
diff --git a/www-apache/mod_fcgid/mod_fcgid-2.1.ebuild b/www-apache/mod_fcgid/mod_fcgid-2.1.ebuild
index d3f7bf733628..8bcc017df64c 100644
--- a/www-apache/mod_fcgid/mod_fcgid-2.1.ebuild
+++ b/www-apache/mod_fcgid/mod_fcgid-2.1.ebuild
@@ -1,8 +1,8 @@
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/www-apache/mod_fcgid/mod_fcgid-2.1.ebuild,v 1.2 2007/03/13 16:19:35 phreak Exp $
+# $Header: /var/cvsroot/gentoo-x86/www-apache/mod_fcgid/mod_fcgid-2.1.ebuild,v 1.3 2007/03/14 19:17:40 phreak Exp $
-inherit apache-module
+inherit apache-module eutils
KEYWORDS="~amd64 ~ppc ~ppc64 ~x86"
@@ -13,9 +13,6 @@ LICENSE="GPL-2"
SLOT="0"
IUSE=""
-DEPEND="=dev-libs/apr-1*"
-RDEPEND="${DEPEND}"
-
S="${WORKDIR}/${PN}.${PV}"
APACHE2_MOD_CONF="20_${PN}"
@@ -32,3 +29,10 @@ APXS2_ARGS="-I ${S} -c ${PN}.c fcgid_bridge.c \
DOCFILES="AUTHOR ChangeLog"
need_apache2
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}"/${P}-apr_shm_remove.patch
+}