Changeset: 312c7c400304 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=312c7c400304
Modified Files:
        gdk/ChangeLog.Dec2011
        gdk/gdk_utils.mx
Branch: Dec2011
Log Message:

MT_init: avoid overflow for memory on Solaris 32-bits

Fix for bug #2935.  Cap the memorysize to something which can be
addressed in 32-bits, when it happens to be larger than that.  Fixes
memory detection on 32-bits targets for Solaris systems that have lots
of memory installed.


diffs (38 lines):

diff --git a/gdk/ChangeLog.Dec2011 b/gdk/ChangeLog.Dec2011
--- a/gdk/ChangeLog.Dec2011
+++ b/gdk/ChangeLog.Dec2011
@@ -1,3 +1,7 @@
 # ChangeLog file for MonetDB
 # This file is updated with Maddlog
 
+* Tue Dec  6 2011 Fabian Groffen <[email protected]>
+- Fixed memory detection on 32-bits Solaris systems with more memory
+  than can be addressed in 32-bits mode, bug #2935
+
diff --git a/gdk/gdk_utils.mx b/gdk/gdk_utils.mx
--- a/gdk/gdk_utils.mx
+++ b/gdk/gdk_utils.mx
@@ -476,7 +476,7 @@ MT_init(void)
                _MT_pagesize = size;
        }
 #elif defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
-       _MT_pagesize = sysconf(_SC_PAGESIZE);
+       _MT_pagesize = (size_t)sysconf(_SC_PAGESIZE);
 #endif
        if (_MT_pagesize <= 0)
                _MT_pagesize = 4096;    /* default */
@@ -543,7 +543,13 @@ MT_init(void)
                _MT_npages = size / _MT_pagesize;
        }
 #elif defined(HAVE_SYSCONF) && defined(_SC_PHYS_PAGES)
-       _MT_npages = sysconf(_SC_PHYS_PAGES);
+       _MT_npages = (size_t)sysconf(_SC_PHYS_PAGES);
+# if SIZEOF_SIZE_T == SIZEOF_INT
+       /* Bug #2935: the value returned here can be more than what can be
+        * addressed on Solaris, so cap the value */
+       if (UINT_MAX / _MT_pagesize < _MT_npages)
+               _MT_npages = UINT_MAX / _MT_pagesize;
+# endif
 #else
 # error "don't know how to get the amount of physical memory for your OS"
 #endif
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to