// Copyright 2009 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 ogle import ( "os" "runtime" ) // An aborter aborts the thread's current computation, usually // passing the error to a waiting thread. type aborter interface { Abort(err os.Error) } type ogleAborter chan os.Error func (a ogleAborter) Abort(err os.Error) { a <- err runtime.Goexit() } // try executes a computation; if the computation Aborts, try returns // the error passed to abort. func try(f func(a aborter)) os.Error { a := make(ogleAborter) go func() { f(a) a <- nil }() err := <-a return err }