sunos-os.c: Do not lose on mmap failure
authorDavid Lichteblau <david@lichteblau.com>
Tue, 18 Sep 2012 15:11:13 +0000 (17:11 +0200)
committerDavid Lichteblau <david@lichteblau.com>
Tue, 18 Sep 2012 15:43:53 +0000 (17:43 +0200)
Brings this platform in line with other POSIX backends.  It is desirable
that we do not `lose' just because too many threads have been created,
for reasons of user-friendliness -- and also because individual
ill-behaved tests should not cause the entire run-tests process to fail.

src/runtime/sunos-os.c

index c1925ed..cab00ba 100644 (file)
@@ -51,7 +51,13 @@ os_vm_address_t os_validate(os_vm_address_t addr, os_vm_size_t len)
 
     if (addr == MAP_FAILED) {
         perror("mmap");
 
     if (addr == MAP_FAILED) {
         perror("mmap");
-        lose ("Error in mmap(..)\n");
+        /* While it is generally hard to recover from out-of-memory
+         * situations, we require callers to decide on the right course
+         * of action here.  Consider thread creation: Failure to mmap
+         * here is common if users have started too many threads, and
+         * often we can recover from that and treat it as an ordinary
+         * error. */
+        return 0;
     }
 
     return addr;
     }
 
     return addr;