From 2df9c20dc76c044e502861a2111b90cbdcbbb957 Mon Sep 17 00:00:00 2001 From: Paul Date: Sat, 24 Sep 2016 22:47:58 +0300 Subject: [PATCH] THRIFT-3855 Replaced complex CompareAndSwapInt64 with syncOnce. Client: Go Paul This closes #1094 --- lib/go/thrift/simple_server.go | 10 ++++++---- 1 file 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 } }