// Copyright 2012 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. // +build windows package svc import ( "errors" "golang.org/x/sys/windows" ) // event represents auto-reset, initially non-signaled Windows event. // It is used to communicate between go and asm parts of this package. type event struct { h windows.Handle } func newEvent() (*event, error) { h, err := windows.CreateEvent(nil, 0, 0, nil) if err != nil { return nil, err } return &event{h: h}, nil } func (e *event) Close() error { return windows.CloseHandle(e.h) } func (e *event) Set() error { return windows.SetEvent(e.h) } func (e *event) Wait() error { s, err := windows.WaitForSingleObject(e.h, windows.INFINITE) switch s { case windows.WAIT_OBJECT_0: break case windows.WAIT_FAILED: return err default: return errors.New("unexpected result from WaitForSingleObject") } return nil }