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
