123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // Copyright 2014 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package cgotest
- //void testHandleLeaks();
- import "C"
- import (
- "syscall"
- "testing"
- "unsafe"
- )
- var issue8517counter int
- var (
- kernel32 = syscall.MustLoadDLL("kernel32.dll")
- getProcessHandleCount = kernel32.MustFindProc("GetProcessHandleCount")
- )
- func processHandleCount(t *testing.T) int {
- const current_process = ^uintptr(0)
- var c uint32
- r, _, err := getProcessHandleCount.Call(current_process, uintptr(unsafe.Pointer(&c)))
- if r == 0 {
- t.Fatal(err)
- }
- return int(c)
- }
- func test8517(t *testing.T) {
- c1 := processHandleCount(t)
- C.testHandleLeaks()
- c2 := processHandleCount(t)
- if c1+issue8517counter <= c2 {
- t.Fatalf("too many handles leaked: issue8517counter=%v c1=%v c2=%v", issue8517counter, c1, c2)
- }
- }
- //export testHandleLeaksCallback
- func testHandleLeaksCallback() {
- issue8517counter++
- }
|