[Mono-bugs] [Bug 53177][Nor] Changed - WaitHandles are not finalizing
bugzilla-daemon@bugzilla.ximian.com
bugzilla-daemon@bugzilla.ximian.com
Sat, 31 Jan 2004 00:30:17 -0500 (EST)
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by derek.mcumber@datamtnsol.com.
http://bugzilla.ximian.com/show_bug.cgi?id=53177
--- shadow/53177 2004-01-30 11:36:41.000000000 -0500
+++ shadow/53177.tmp.29766 2004-01-31 00:30:17.000000000 -0500
@@ -1,12 +1,12 @@
Bug#: 53177
Product: Mono/Runtime
Version: unspecified
OS: unknown
OS Details:
-Status: REOPENED
+Status: NEEDINFO
Resolution:
Severity: Unknown
Priority: Normal
Component: misc
AssignedTo: mono-bugs@ximian.com
ReportedBy: derek.mcumber@datamtnsol.com
@@ -530,6 +530,72 @@
My current assessment is that with fairly high probability, you are
really seeing
Mono issues, and not something I can address.
Hans
+
+------- Additional Comments From derek.mcumber@datamtnsol.com 2004-01-31 00:30 -------
+More from Derek and Hans Boehm:
+
+DEREK>>>
+Your comment about the false pointers makes sense. When it adds heap
+in the while loop, i see it calling GC_allochblk which loops through
+the GC_allochblk_nth and will loop through a completely new and
+supposedly empty block and come back saying it needs more heap because
+it is 'full'.
+
+How can I blank out new heaps to not do this? On Windows98 it will loop
+through and lock up the OS bacause it cannot find good memory and cannot
+get out of the while loop in malloc.c.
+
+You will see this if WindowsME is similar.
+
+Any thoughts on how to fix this?
+>>>>
+
+HANS>>>
+I don't think this is an issue with fresh heap blocks. My impression
+(and perhaps I misunderstood that) is that your web server manipulates or
+generates compressed (or encrypted?) data. Compressed data has the
+unfortunate
+property that when you interpret it as integers or pointers, it's
+pretty uniformly
+distributed. Hence on a 32 bit machine, if you have 4 MB of
+compressed data
+in the heap, and the collector scans it, it will appear as 1 million
+uniformly
+distributed pointers to every part of the address space. The average
+"hole"
+between these false pointer references will be 4KB, making it hard to
+allocate
+a 20KB objects that does not appear to be referenced by one of these.
+
+The solution is to let the GC know that the compressed data does not
+contain
+pointers, and hence should not be scanned. Presumably compressed data
+is stored
+in an array of integers or bytes. My reading of the Mono code is that
+it already
+tries to tell the collector that such data should not be scanned.
+(There may
+be an exception for pointer-sized integers, which may be getting in
+the way here.)
+My guess is that this isn't working correctly (assuming you have a
+sufficiently
+recent Mono version that it should be working).
+
+If you don't mind, we should really get the Mono developers involved
+in this
+discussion, since this part is their code, not mine. Even if there
+isn't an obvious
+fix at their end, other solutions require input from them. For
+example, I suspect
+that Mono is more sensitive to this kind of problem than gcj since
+pointers into the
+interior of objects have to be recognized. But I don't know whether
+that is always
+true, or whether there might be some way to limit this (as you
+effectively do
+by setting the ignore_off_page flag).
+
+Hans