Alexandre Julliard : libwine: Reserve some malloc space on Solaris before we start mapping other things.

Alexandre Julliard julliard at winehq.org
Thu Sep 4 08:26:40 CDT 2008


Module: wine
Branch: master
Commit: c614a2481a9f8377103d203e85dde926fa45431a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c614a2481a9f8377103d203e85dde926fa45431a

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Sep  3 17:22:13 2008 +0200

libwine: Reserve some malloc space on Solaris before we start mapping other things.

---

 libs/wine/mmap.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/libs/wine/mmap.c b/libs/wine/mmap.c
index 8b79580..ff117cc 100644
--- a/libs/wine/mmap.c
+++ b/libs/wine/mmap.c
@@ -286,7 +286,30 @@ static void reserve_area( void *addr, void *end )
     }
 #endif
 }
+
+
+/***********************************************************************
+ *           reserve_malloc_space
+ *
+ * Solaris malloc is not smart enough to obtain space through mmap(), so try to make
+ * sure that there is some available sbrk() space before we reserve other things.
+ */
+static void reserve_malloc_space( size_t size )
+{
+#ifdef __sun
+    size_t i, count = size / 1024;
+    void **ptrs = malloc( count * sizeof(ptrs[0]) );
+
+    if (!ptrs) return;
+
+    for (i = 0; i < count; i++) if (!(ptrs[i] = malloc( 1024 ))) break;
+    if (i--)  /* free everything except the last one */
+        while (i) free( ptrs[--i] );
+    free( ptrs );
 #endif
+}
+
+#endif  /* __i386__ */
 
 
 /***********************************************************************
@@ -325,6 +348,8 @@ void mmap_init(void)
     char * const stack_ptr = &stack;
     char *user_space_limit = (char *)0x7ffe0000;
 
+    reserve_malloc_space( 8 * 1024 * 1024 );
+
     /* check for a reserved area starting at the user space limit */
     /* to avoid wasting time trying to allocate it again */
     LIST_FOR_EACH( ptr, &reserved_areas )




More information about the wine-cvs mailing list