MD5 48a38cb735bc6e9a4735dc9c2952625b files/mono-1.1.18-mcs-crasher-fix.diff 437
RMD160 08cd21ee2aaf40d1fc608a48eaa07fc72a486034 files/mono-1.1.18-mcs-crasher-fix.diff 437
SHA256 71b06b9f00ad66a87872cd90f3c3d578e11a2152215883a40c73c44879cf7c80 files/mono-1.1.18-mcs-crasher-fix.diff 437
+AUX mono-1.2.1-zombie-processes.diff 6382 RMD160 9e497bdc3ba8f63a34bfd9921b390b0e94aca018 SHA1 f623bbfe9fdb01e01be30eaf70e53f402068e51b SHA256 df5879f4f98b7631b3bb8395657883609bf35761dc0444d4a28b98eb1386b901
+MD5 2827d95f880924b8f51f70ee8998cd89 files/mono-1.2.1-zombie-processes.diff 6382
+RMD160 9e497bdc3ba8f63a34bfd9921b390b0e94aca018 files/mono-1.2.1-zombie-processes.diff 6382
+SHA256 df5879f4f98b7631b3bb8395657883609bf35761dc0444d4a28b98eb1386b901 files/mono-1.2.1-zombie-processes.diff 6382
DIST mono-1.1.13.8.1.tar.gz 17758715 RMD160 a100a96b19300b253c12a2ad70caf65721418209 SHA1 f2cb79844073694859b1fb92eb770e3705239a3d SHA256 841cd62de1f61fefd17190dcc744e03f49c495039cc2088627ede9d9d825e21a
DIST mono-1.1.16.1.tar.gz 19115095 RMD160 3ccf59d5e8f3e7ce74bccd495d7a8413a0fdce9c SHA1 fd68988e2d6002f4b631edfb8dee372bc9d979b3 SHA256 6404bd0b34c642bb159328486949424d7d51f444cfbed5c83ee5f4ee3ad34b0f
DIST mono-1.1.18.tar.gz 19457001 RMD160 60134edff923ca2a39cb82f75f5dcc7468edb601 SHA1 9791658fe6f5e4c6fd001a2f7fe4d46e80b549e2 SHA256 8b5a62cb91b92a9b77c62595f7f081971efac66fdfebaf1de7cd5c15b425c36b
+DIST mono-1.2.1.tar.gz 19861863 RMD160 1f363ab99cbfcb6ded9dc5b2a82cd0c2f61276be SHA1 70056379eee61c2b4691af772efb5111dd0a63c3 SHA256 7d37908a6841209d44380602426e5e751b987e6f32c08dd6d15bc806298358de
DIST mono-1.2.tar.gz 19606768 RMD160 5143aee08d5289852166cdac1d81c6be63a1595d SHA1 e19af80b014590d9bf9e5986b9920779c3086595 SHA256 41e1dfe6e2acfd22375f949c6f5984eacfb3b75d0b140a1062d1d78a4aabf64f
EBUILD mono-1.1.13.8.1.ebuild 2664 RMD160 7e1f083b783beb6ecb57e2cb07e477cd89835b34 SHA1 e419b741d0501de08d339aa95f1cb20b1cfa1fce SHA256 aa9ef22440048d16a0b2fd5635774132997c88e227b18bd1d75dd4bd5e90a34f
MD5 0ed35833d9b3acbfed16adc5baaf56d4 mono-1.1.13.8.1.ebuild 2664
MD5 161188252053d1852e854b488b901647 mono-1.1.18.ebuild 2839
RMD160 0d460cf3ba4ae4ded656f8a7eb919c3011579ac5 mono-1.1.18.ebuild 2839
SHA256 7a986002ca72aa5a399666e015c1a74929573d994d8b76dbf6792b724391add3 mono-1.1.18.ebuild 2839
+EBUILD mono-1.2.1.ebuild 2795 RMD160 505a40bd19ccf7208639cd5b434f50d02771ee51 SHA1 9f597be390269bf7ba72aabcdcffc40aaed91992 SHA256 d697b553803c79a10e3add508c5f2fce65fe7bf9a3e8b785801a8a453e954316
+MD5 13347d3eca628172da524ae9de0499c1 mono-1.2.1.ebuild 2795
+RMD160 505a40bd19ccf7208639cd5b434f50d02771ee51 mono-1.2.1.ebuild 2795
+SHA256 d697b553803c79a10e3add508c5f2fce65fe7bf9a3e8b785801a8a453e954316 mono-1.2.1.ebuild 2795
EBUILD mono-1.2.ebuild 2743 RMD160 4cdf88df26e446a2570feeb1419164b5d14e3bdc SHA1 2f3926f0628cf1766a33887c08fabc8d977d2b9b SHA256 86fe892557d5da34fbbace09290ad4cf0d09c8176769f6aa61fc57f37cf004c9
MD5 7bbd3370a815b9ed4935d7b8758615e7 mono-1.2.ebuild 2743
RMD160 4cdf88df26e446a2570feeb1419164b5d14e3bdc mono-1.2.ebuild 2743
SHA256 86fe892557d5da34fbbace09290ad4cf0d09c8176769f6aa61fc57f37cf004c9 mono-1.2.ebuild 2743
-MISC ChangeLog 24134 RMD160 081f4f2320628477ed086d16e60f0f709ad9f949 SHA1 6132df1cc600765fcefb3b872a166132284d64dc SHA256 9fe39c7e05187e4c5008038235ee0dba473bede92abf0dbbbe6d976cd55ca341
-MD5 2e48a91714ceac96e25be9facfb7b93e ChangeLog 24134
-RMD160 081f4f2320628477ed086d16e60f0f709ad9f949 ChangeLog 24134
-SHA256 9fe39c7e05187e4c5008038235ee0dba473bede92abf0dbbbe6d976cd55ca341 ChangeLog 24134
+MISC ChangeLog 24281 RMD160 d9cc433bc0a3d19251f0f90edb053bb20063645c SHA1 fc6976d8378b0bd1aefefd98b6ba92a6aae246b1 SHA256 5c6d04911c2872e2ff488ae2c365175522869a508c7c88c7a59349b2a9e3ce9d
+MD5 6e9eabc33ae83f404ec408bf73e74245 ChangeLog 24281
+RMD160 d9cc433bc0a3d19251f0f90edb053bb20063645c ChangeLog 24281
+SHA256 5c6d04911c2872e2ff488ae2c365175522869a508c7c88c7a59349b2a9e3ce9d ChangeLog 24281
MISC metadata.xml 159 RMD160 41527b6d3fa74dfdcd619b7d91c478b72ecc8ae8 SHA1 ac19a418765e817e54d4c54c1992c9062d5dcf3e SHA256 986c3e2fa3baa5d6e8c0b5c27a2550601780d0cc7857f7f1c01523491706d909
MD5 76b314cc7b7b79b298dd4889dff8c9cd metadata.xml 159
RMD160 41527b6d3fa74dfdcd619b7d91c478b72ecc8ae8 metadata.xml 159
MD5 ca1445b57a30df1ac1497849a2016110 files/digest-mono-1.2 232
RMD160 7888c0c2715ab0782d331ddc999b4fe2ed839a35 files/digest-mono-1.2 232
SHA256 6d49fa27482d64ea72177881a66448a413ac642ed164deaea5530da1d856e513 files/digest-mono-1.2 232
+MD5 3c5db3d0c8e3c9a9f3fc434f1ebeaafe files/digest-mono-1.2.1 238
+RMD160 c4aa4ce70004170e9ab5a2c78da795df3cc0870c files/digest-mono-1.2.1 238
+SHA256 06421ce2dd70bb6435485dec46534f105e80ac9507e18701e64e3aad10d99418 files/digest-mono-1.2.1 238
--- /dev/null
+--- trunk/mono/mono/io-layer/process-private.h 2006/05/12 10:38:20 60618
++++ trunk/mono/mono/io-layer/process-private.h 2006/11/23 00:39:10 68378
+@@ -31,6 +31,7 @@
+ gchar proc_name[_WAPI_PROC_NAME_MAX_LEN];
+ size_t min_working_set;
+ size_t max_working_set;
++ gboolean waited;
+ };
+
+ extern void _wapi_process_reap (void);
+
+--- trunk/mono/mono/io-layer/processes.c 2006/11/18 19:02:51 68130
++++ trunk/mono/mono/io-layer/processes.c 2006/11/23 00:39:10 68378
+@@ -80,6 +80,10 @@
+ process_handle->exitstatus = WEXITSTATUS(status);
+ }
+ _wapi_time_t_to_filetime (time(NULL), &process_handle->exit_time);
++
++ /* Don't set process_handle->waited here, it needs to only
++ * happen in the parent when wait() has been called.
++ */
+
+ #ifdef DEBUG
+ g_message ("%s: Setting handle %p signalled", __func__, handle);
+@@ -108,17 +112,17 @@
+ int status;
+ pid_t ret;
+
+- if (_wapi_handle_issignalled (test)) {
+- /* We've already done this one */
+- return (FALSE);
+- }
+-
+ ok = _wapi_lookup_handle (test, WAPI_HANDLE_PROCESS,
+ (gpointer *)&process);
+ if (ok == FALSE) {
+ /* The handle must have been too old and was reaped */
+ return (FALSE);
+ }
++
++ if (process->waited) {
++ /* We've already done this one */
++ return(FALSE);
++ }
+
+ do {
+ ret = waitpid (process->id, &status, WNOHANG);
+@@ -138,6 +142,8 @@
+ g_message ("%s: Process %d finished", __func__, ret);
+ #endif
+
++ process->waited = TRUE;
++
+ *(int *)user_data = status;
+
+ return (TRUE);
+@@ -185,8 +191,16 @@
+ #ifdef DEBUG
+ g_message ("%s: Waiting for process %p", __func__, handle);
+ #endif
++
++ ok = _wapi_lookup_handle (handle, WAPI_HANDLE_PROCESS,
++ (gpointer *)&process_handle);
++ if (ok == FALSE) {
++ g_warning ("%s: error looking up process handle %p", __func__,
++ handle);
++ return(WAIT_FAILED);
++ }
+
+- if (_wapi_handle_issignalled (handle)) {
++ if (process_handle->waited) {
+ /* We've already done this one */
+ #ifdef DEBUG
+ g_message ("%s: Process %p already signalled", __func__,
+@@ -195,14 +209,6 @@
+
+ return (WAIT_OBJECT_0);
+ }
+-
+- ok = _wapi_lookup_handle (handle, WAPI_HANDLE_PROCESS,
+- (gpointer *)&process_handle);
+- if (ok == FALSE) {
+- g_warning ("%s: error looking up process handle %p", __func__,
+- handle);
+- return(WAIT_FAILED);
+- }
+
+ pid = process_handle->id;
+
+@@ -211,9 +217,15 @@
+ #endif
+
+ if (timeout == INFINITE) {
+- while ((ret = waitpid (pid, &status, 0)) != pid) {
+- if (ret == (pid_t)-1 && errno != EINTR) {
+- return(WAIT_FAILED);
++ if (pid == _wapi_getpid ()) {
++ do {
++ Sleep (10000);
++ } while(1);
++ } else {
++ while ((ret = waitpid (pid, &status, 0)) != pid) {
++ if (ret == (pid_t)-1 && errno != EINTR) {
++ return(WAIT_FAILED);
++ }
+ }
+ }
+ } else if (timeout == 0) {
+@@ -224,18 +236,47 @@
+ }
+ } else {
+ /* Poll in a loop */
+- do {
+- ret = waitpid (pid, &status, WNOHANG);
+- if (ret == pid) {
+- break;
+- } else if (ret == (pid_t)-1 && errno != EINTR) {
+- return(WAIT_FAILED);
+- }
++ if (pid == _wapi_getpid ()) {
++ Sleep (timeout);
++ return(WAIT_TIMEOUT);
++ } else {
++ do {
++ ret = waitpid (pid, &status, WNOHANG);
++#ifdef DEBUG
++ g_message ("%s: waitpid returns: %d, timeout is %d", __func__, ret, timeout);
++#endif
++
++ if (ret == pid) {
++ break;
++ } else if (ret == (pid_t)-1 &&
++ errno != EINTR) {
++#ifdef DEBUG
++ g_message ("%s: waitpid failure: %s",
++ __func__,
++ g_strerror (errno));
++#endif
+
+- _wapi_handle_spin (100);
+- timeout -= 100;
+- } while (timeout > 0);
++ if (errno == ECHILD &&
++ process_handle->waited) {
++ /* The background
++ * process reaper must
++ * have got this one
++ */
++#ifdef DEBUG
++ g_message ("%s: Process %p already reaped", __func__, handle);
++#endif
+
++ return(WAIT_OBJECT_0);
++ } else {
++ return(WAIT_FAILED);
++ }
++ }
++
++ _wapi_handle_spin (100);
++ timeout -= 100;
++ } while (timeout > 0);
++ }
++
+ if (timeout <= 0) {
+ return(WAIT_TIMEOUT);
+ }
+@@ -251,7 +292,8 @@
+ SetLastError (ERROR_OUTOFMEMORY);
+ return (WAIT_FAILED);
+ }
+-
++ process_handle->waited = TRUE;
++
+ return(WAIT_OBJECT_0);
+ }
+
+@@ -268,6 +310,8 @@
+ process_handle->min_working_set = 204800;
+ process_handle->max_working_set = 1413120;
+
++ process_handle->waited = FALSE;
++
+ _wapi_time_t_to_filetime (time (NULL), &process_handle->create_time);
+ }
+
+@@ -919,6 +963,11 @@
+ g_strfreev (env_strings);
+ }
+
++#ifdef DEBUG
++ g_message ("%s: returning handle %p for pid %d", __func__, handle,
++ pid);
++#endif
++
+ return(ret);
+ }
+
+@@ -960,6 +1009,8 @@
+ const char *handle_env;
+ struct _WapiHandle_process process_handle = {0};
+
++ mono_once (&process_ops_once, process_ops_init);
++
+ handle_env = g_getenv ("_WAPI_PROCESS_HANDLE_OFFSET");
+ g_unsetenv ("_WAPI_PROCESS_HANDLE_OFFSET");
+
+--- trunk/mono/mono/io-layer/wapi-private.h 2006/03/24 12:19:30 58409
++++ trunk/mono/mono/io-layer/wapi-private.h 2006/11/23 00:39:10 68378
+@@ -24,8 +24,7 @@
+ /* Increment this whenever an incompatible change is made to the
+ * shared handle structure.
+ */
+-/* Next time I change this, remember to fix the process count in shared.c */
+-#define _WAPI_HANDLE_VERSION 10
++#define _WAPI_HANDLE_VERSION 11
+
+ typedef enum {
+ WAPI_HANDLE_UNUSED=0,
+
+--- trunk/mono/mono/io-layer/shared.c 2006/07/25 12:56:51 62955
++++ trunk/mono/mono/io-layer/shared.c 2006/11/23 00:39:10 68378
+@@ -292,12 +292,11 @@
+ for (i = 0; i < _WAPI_SHARED_SEM_COUNT; i++) {
+ def_vals[i] = 1;
+ }
+-#ifdef NEXT_VERSION_INC
++
+ /* Process count must start at '0' - the 1 for all the others
+ * sets the semaphore to "unlocked"
+ */
+ def_vals[_WAPI_SHARED_SEM_PROCESS_COUNT] = 0;
+-#endif
+
+ defs.array = def_vals;
+
+@@ -438,19 +437,9 @@
+
+ proc_count = semctl (_wapi_sem_id, _WAPI_SHARED_SEM_PROCESS_COUNT,
+ GETVAL);
+-#ifdef NEXT_VERSION_INC
++
+ g_assert (proc_count > 0);
+ if (proc_count == 1) {
+-#else
+- /* Compatibility - the semaphore was initialised to '1' (which
+- * normally means 'unlocked'. Instead of fixing that right
+- * now, which would mean a shared file version increment, just
+- * cope with the value starting too high for now. Fix this
+- * next time I have to change the file version.
+- */
+- g_assert (proc_count > 1);
+- if (proc_count == 2) {
+-#endif
+ /* Just us, so blow away the semaphores and the shared
+ * files
+ */
--- /dev/null
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-lang/mono/mono-1.2.1.ebuild,v 1.1 2006/11/24 23:40:40 latexer Exp $
+
+inherit eutils flag-o-matic multilib autotools
+
+DESCRIPTION="Mono runtime and class libraries, a C# compiler/interpreter"
+HOMEPAGE="http://www.go-mono.com"
+SRC_URI="http://www.go-mono.com/sources/mono/${P}.tar.gz"
+
+LICENSE="|| ( GPL-2 LGPL-2 X11 )"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE="X nptl"
+
+RDEPEND="!<dev-dotnet/pnet-0.6.12
+ >=dev-libs/glib-2.6
+ nptl? ( >=sys-devel/gcc-3.3.5-r1 )
+ ppc? (
+ >=sys-devel/gcc-3.2.3-r4
+ >=sys-libs/glibc-2.3.3_pre20040420
+ )
+ X? ( >=dev-dotnet/libgdiplus-1.2.1 )"
+DEPEND="${RDEPEND}
+ sys-devel/bc
+ >=dev-util/pkgconfig-0.19"
+
+# Parallel build unfriendly
+MAKEOPTS="${MAKEOPTS} -j1"
+
+# confcache causes build errors
+RESTRICT="confcache"
+
+function get-memory-total() {
+ cat /proc/meminfo | grep MemTotal | sed -r "s/[^0-9]*([[0-9]+).*/\1/"
+}
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+
+ epatch ${FILESDIR}/${P}-zombie-processes.diff
+
+ # Fix the install path, install into $(libdir)
+ sed -i -e 's:$(prefix)/lib:$(libdir):' \
+ -i -e 's:$(exec_prefix)/lib:$(libdir):' \
+ -i -e "s:'mono_libdir=\${exec_prefix}/lib':\"mono_libdir=\$libdir\":" \
+ ${S}/{scripts,mono/metadata}/Makefile.am ${S}/configure.in \
+ || die "sed failed"
+
+ sed -i -e 's:^libdir.*:libdir=@libdir@:' \
+ -i -e 's:${prefix}/lib/:${libdir}/:g' \
+ ${S}/{scripts,}/*.pc.in \
+ || die "sed failed"
+
+ # Remove dummy ltconfig and let libtool handle it
+ rm -f ${S}/libgc/ltconfig
+
+ eautoreconf
+}
+
+src_compile() {
+ # mono's build system is finiky, strip the flags
+ strip-flags
+
+ # Enable the 2.0 FX, use the system glib and the gc
+ local myconf="--with-preview=yes --with-glib=system --with-gc=included"
+
+ # Threading support
+ if use amd64 ; then
+ # force __thread on amd64 (bug #83770)
+ myconf="${myconf} --with-tls=__thread"
+ else
+ if use nptl ; then
+ myconf="${myconf} --with-tls=__thread"
+ else
+ myconf="${myconf} --with-tls=pthread"
+ fi
+ fi
+
+ # Enable large heaps if memory is more than >=3GB
+ if [[ $(get-memory-total) -ge 3145728 ]] ; then
+ myconf="${myconf} --with-large-heap=yes"
+ fi
+
+ # Force the use of monolite mcs to prevent issues with classlibs (bug #118062)
+ touch ${S}/mcs/build/deps/use-monolite
+
+ econf ${myconf} || die "configure failed"
+ emake || die "compile failed"
+}
+
+src_install() {
+ emake DESTDIR=${D} install || die "install failed"
+
+ dodoc AUTHORS ChangeLog NEWS README
+
+ docinto docs
+ dodoc docs/*
+
+ docinto libgc
+ dodoc libgc/ChangeLog
+}