diff options
author | Paul <pavel.finkelshtein@gmail.com> | 2016-09-24 22:47:58 +0300 |
---|---|---|
committer | Jens Geyer <jensg@apache.org> | 2016-09-26 22:05:19 +0200 |
commit | 2df9c20dc76c044e502861a2111b90cbdcbbb957 (patch) | |
tree | 1eda14560902355a4eeeca2eccb20e5d04f05c77 | |
parent | 1ac0a80aa07421a4b7a857d801038b7991833f7f (diff) | |
download | thrift-2df9c20dc76c044e502861a2111b90cbdcbbb957.tar.gz |
THRIFT-3855 Replaced complex CompareAndSwapInt64 with syncOnce.
Client: Go
Paul <pavel.finkelshtein@gmail.com>
This closes #1094
-rw-r--r-- | lib/go/thrift/simple_server.go | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/go/thrift/simple_server.go b/lib/go/thrift/simple_server.go index 8c56a4fee..4097c4aea 100644 --- a/lib/go/thrift/simple_server.go +++ b/lib/go/thrift/simple_server.go @@ -22,13 +22,12 @@ package thrift import ( "log" "runtime/debug" - "sync/atomic" + "sync" ) // Simple, non-concurrent server for testing. type TSimpleServer struct { quit chan struct{} - stopped int64 processorFactory TProcessorFactory serverTransport TServerTransport @@ -150,11 +149,14 @@ func (p *TSimpleServer) Serve() error { return nil } +var once sync.Once + func (p *TSimpleServer) Stop() error { - if atomic.CompareAndSwapInt64(&p.stopped, 0, 1) { + q := func() { p.quit <- struct{}{} p.serverTransport.Interrupt() } + once.Do(q) return nil } @@ -186,7 +188,7 @@ func (p *TSimpleServer) processRequests(client TTransport) error { if err, ok := err.(TApplicationException); ok && err.TypeId() == UNKNOWN_METHOD { continue } - if !ok { + if !ok { break } } |