From 46cf044d1413eb30428ebe4925ab406f45b52f1d Mon Sep 17 00:00:00 2001 From: Hanno Hecker Date: Wed, 10 May 2017 07:45:27 +0200 Subject: [PATCH] fix race w/ *Conn.requestTimeout this fixes the race seen e.g. in https://travis-ci.org/go-ldap/ldap/jobs/227891683 --- conn.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/conn.go b/conn.go index e701a9b6..7b727dfc 100644 --- a/conn.go +++ b/conn.go @@ -193,7 +193,7 @@ func (l *Conn) Close() { // SetTimeout sets the time after a request is sent that a MessageTimeout triggers func (l *Conn) SetTimeout(timeout time.Duration) { if timeout > 0 { - l.requestTimeout = timeout + atomic.StoreInt64((*int64)(&l.requestTimeout), int64(timeout)) } } @@ -388,14 +388,15 @@ func (l *Conn) processMessages() { l.messageContexts[message.MessageID] = message.Context // Add timeout if defined - if l.requestTimeout > 0 { + to := time.Duration(atomic.LoadInt64((*int64)(&l.requestTimeout))) + if to > 0 { go func() { defer func() { if err := recover(); err != nil { log.Printf("ldap: recovered panic in RequestTimeout: %v", err) } }() - time.Sleep(l.requestTimeout) + time.Sleep(to) timeoutMessage := &messagePacket{ Op: MessageTimeout, MessageID: message.MessageID,