| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // Copyright (C) 2014 The Syncthing Authors.
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
- // You can obtain one at https://mozilla.org/MPL/2.0/.
- package beacon
- import (
- "net"
- stdsync "sync"
- "github.com/thejerf/suture"
- )
- type recv struct {
- data []byte
- src net.Addr
- }
- type Interface interface {
- suture.Service
- Send(data []byte)
- Recv() ([]byte, net.Addr)
- Error() error
- }
- type errorHolder struct {
- err error
- mut stdsync.Mutex // uses stdlib sync as I want this to be trivially embeddable, and there is no risk of blocking
- }
- func (e *errorHolder) setError(err error) {
- e.mut.Lock()
- e.err = err
- e.mut.Unlock()
- }
- func (e *errorHolder) Error() error {
- e.mut.Lock()
- err := e.err
- e.mut.Unlock()
- return err
- }
|