Merge lp:~chipaca/ubuntu-push/no-more-retrier-lock into lp:ubuntu-push/automatic

Proposed by John Lenton
Status: Merged
Approved by: John Lenton
Approved revision: 384
Merged at revision: 381
Proposed branch: lp:~chipaca/ubuntu-push/no-more-retrier-lock
Merge into: lp:ubuntu-push/automatic
Prerequisite: lp:~chipaca/ubuntu-push/no-more-session-close
Diff against target: 57 lines (+5/-14)
1 file modified
client/session/session.go (+5/-14)
To merge this branch: bzr merge lp:~chipaca/ubuntu-push/no-more-retrier-lock
Reviewer Review Type Date Requested Status
Samuele Pedroni Approve
Review via email: mp+253183@code.launchpad.net

Commit message

Get rid of session.RetrierLock.

To post a comment you must log in.
Revision history for this message
Samuele Pedroni (pedronis) wrote :

good :) !

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'client/session/session.go'
2--- client/session/session.go 2015-03-17 11:12:42 +0000
3+++ client/session/session.go 2015-03-17 11:12:42 +0000
4@@ -159,7 +159,6 @@
5 proto protocol.Protocol
6 pingInterval time.Duration
7 retrier util.AutoRedialer
8- retrierLock sync.Mutex
9 cookie string
10 // status
11 stateLock sync.RWMutex
12@@ -400,8 +399,6 @@
13 }
14
15 func (sess *clientSession) stopRedial() {
16- sess.retrierLock.Lock()
17- defer sess.retrierLock.Unlock()
18 if sess.retrier != nil {
19 sess.retrier.Stop()
20 sess.retrier = nil
21@@ -414,24 +411,16 @@
22 sess.setShouldDelay()
23 }
24 time.Sleep(sess.redialDelay(sess))
25- sess.retrierLock.Lock()
26- defer sess.retrierLock.Unlock()
27 if sess.retrier != nil {
28 panic("session AutoRedial: unexpected non-nil retrier.")
29 }
30 sess.retrier = util.NewAutoRedialer(sess)
31 sess.lastAutoRedial = time.Now()
32- go func() {
33- sess.retrierLock.Lock()
34- retrier := sess.retrier
35- sess.retrierLock.Unlock()
36- if retrier == nil {
37- sess.Log.Debugf("session autoredialer skipping retry: retrier has been set to nil.")
38- return
39- }
40+ go func(retrier util.AutoRedialer) {
41 sess.Log.Debugf("session autoredialier launching Redial goroutine")
42+ // if the redialer has been stopped before calling Redial(), it'll return 0.
43 sess.doneCh <- retrier.Redial()
44- }()
45+ }(sess.retrier)
46 }
47
48 func (sess *clientSession) doClose(resetCookie bool) {
49@@ -718,6 +707,8 @@
50 sess.Log.Infof("session shutting down.")
51 break Loop
52 case n := <-sess.doneCh:
53+ // if n == 0, the redialer aborted. If you do
54+ // anything other than log it, keep that in mind.
55 sess.Log.Debugf("connected after %d attempts.", n)
56 case err := <-sess.errCh:
57 sess.errHandler(err)

Subscribers

People subscribed via source and target branches