Home | History | Annotate | Download | only in test
      1 // Copyright 2014 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 cgotest
      6 
      7 //void testHandleLeaks();
      8 import "C"
      9 
     10 import (
     11 	"syscall"
     12 	"testing"
     13 	"unsafe"
     14 )
     15 
     16 var issue8517counter int
     17 
     18 var (
     19 	kernel32              = syscall.MustLoadDLL("kernel32.dll")
     20 	getProcessHandleCount = kernel32.MustFindProc("GetProcessHandleCount")
     21 )
     22 
     23 func processHandleCount(t *testing.T) int {
     24 	const current_process = ^uintptr(0)
     25 	var c uint32
     26 	r, _, err := getProcessHandleCount.Call(current_process, uintptr(unsafe.Pointer(&c)))
     27 	if r == 0 {
     28 		t.Fatal(err)
     29 	}
     30 	return int(c)
     31 }
     32 
     33 func test8517(t *testing.T) {
     34 	c1 := processHandleCount(t)
     35 	C.testHandleLeaks()
     36 	c2 := processHandleCount(t)
     37 	if c1+issue8517counter <= c2 {
     38 		t.Fatalf("too many handles leaked: issue8517counter=%v c1=%v c2=%v", issue8517counter, c1, c2)
     39 	}
     40 }
     41 
     42 //export testHandleLeaksCallback
     43 func testHandleLeaksCallback() {
     44 	issue8517counter++
     45 }
     46