Home | History | Annotate | Download | only in testasan
      1 // Copyright 2013 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package main
      6 
      7 /*
      8 #include <sys/mman.h>
      9 #include <pthread.h>
     10 #include <unistd.h>
     11 
     12 void ctor(void) __attribute__((constructor));
     13 static void* thread(void*);
     14 
     15 void
     16 ctor(void)
     17 {
     18 	// occupy memory where Go runtime would normally map heap
     19 	mmap((void*)0x00c000000000, 64<<10, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, -1, 0);
     20 
     21 	// allocate 4K every 10us
     22 	pthread_t t;
     23 	pthread_create(&t, 0, thread, 0);
     24 }
     25 
     26 static void*
     27 thread(void *p)
     28 {
     29 	for(;;) {
     30 		usleep(10000);
     31 		mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
     32 	}
     33 	return 0;
     34 }
     35 */
     36 import "C"
     37 
     38 import (
     39 	"time"
     40 )
     41 
     42 func main() {
     43 	// ensure that we can function normally
     44 	var v [][]byte
     45 	for i := 0; i < 1000; i++ {
     46 		time.Sleep(10 * time.Microsecond)
     47 		v = append(v, make([]byte, 64<<10))
     48 	}
     49 }
     50