THRIFT-3855 Replaced complex CompareAndSwapInt64 with syncOnce.
Client: Go
Paul <pavel.finkelshtein@gmail.com>
This closes #1094
diff --git a/lib/go/thrift/simple_server.go b/lib/go/thrift/simple_server.go
index 8c56a4f..4097c4a 100644
--- a/lib/go/thrift/simple_server.go
+++ b/lib/go/thrift/simple_server.go
@@ -22,13 +22,12 @@
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 @@
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 @@
if err, ok := err.(TApplicationException); ok && err.TypeId() == UNKNOWN_METHOD {
continue
}
- if !ok {
+ if !ok {
break
}
}