summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul <pavel.finkelshtein@gmail.com>2016-09-24 22:47:58 +0300
committerJens Geyer <jensg@apache.org>2016-09-26 22:05:19 +0200
commit2df9c20dc76c044e502861a2111b90cbdcbbb957 (patch)
tree1eda14560902355a4eeeca2eccb20e5d04f05c77
parent1ac0a80aa07421a4b7a857d801038b7991833f7f (diff)
downloadthrift-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.go10
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
}
}