Skip to content

Commit ce4dcd9

Browse files
authored
Merge pull request globalsign#40 from joomcode/feature/fix-concurrency-npd
Fix concurrent `cluster.servers` usage
2 parents abb2825 + 5acacc4 commit ce4dcd9

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

gridfs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,7 @@ func (file *GridFile) insertChunk(data []byte) {
678678
// an error, if any.
679679
func (file *GridFile) Seek(offset int64, whence int) (pos int64, err error) {
680680
file.m.Lock()
681-
debugf("GridFile %p: seeking for %s (whence=%d)", file, offset, whence)
681+
debugf("GridFile %p: seeking for %d (whence=%d)", file, offset, whence)
682682
defer file.m.Unlock()
683683
switch whence {
684684
case os.SEEK_SET:

session.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -872,14 +872,20 @@ func (s *Session) String() string {
872872
if cluster == nil {
873873
return "<closed session>"
874874
}
875-
servers := cluster.servers.Slice()
876-
allHosts := make([]string, 0, len(servers))
877-
for _, server := range servers {
878-
allHosts = append(allHosts, server.Addr)
879-
}
875+
allHosts := func() []string {
876+
cluster.Lock()
877+
defer cluster.Unlock()
878+
879+
servers := cluster.servers.Slice()
880+
hosts := make([]string, 0, len(servers))
881+
for _, server := range servers {
882+
hosts = append(hosts, server.Addr)
883+
}
884+
return hosts
885+
}()
880886
sort.Strings(allHosts)
881887

882-
dedupHosts := make([]string, 0, len(servers))
888+
dedupHosts := make([]string, 0, len(allHosts))
883889
for i, host := range allHosts {
884890
if (i == 0) || (allHosts[i-1] != host) {
885891
dedupHosts = append(dedupHosts, host)
@@ -3993,7 +3999,7 @@ func (db *Database) run(socket *mongoSocket, cmd, result interface{}) (err error
39933999
if result != nil {
39944000
err = bson.Unmarshal(data, result)
39954001
if err != nil {
3996-
debugf("Run command unmarshaling failed: %#v", op, err)
4002+
debugf("Run command unmarshaling failed %#v: %#v", op, err)
39974003
return err
39984004
}
39994005
if globalDebug && globalLogger != nil {

0 commit comments

Comments
 (0)