Merge lp:~chipaca/ubuntu-push/session-state-lock into lp:ubuntu-push/automatic

Proposed by John Lenton
Status: Merged
Approved by: John Lenton
Approved revision: 372
Merged at revision: 374
Proposed branch: lp:~chipaca/ubuntu-push/session-state-lock
Merge into: lp:ubuntu-push/automatic
Prerequisite: lp:~chipaca/ubuntu-push/client-session-iface
Diff against target: 50 lines (+10/-6)
1 file modified
client/session/session.go (+10/-6)
To merge this branch: bzr merge lp:~chipaca/ubuntu-push/session-state-lock
Reviewer Review Type Date Requested Status
Samuele Pedroni Approve
Review via email: mp+252611@code.launchpad.net

Commit message

Make session lock explicit.

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

looks good

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'client/session/session.go'
--- client/session/session.go 2015-03-11 17:01:25 +0000
+++ client/session/session.go 2015-03-11 17:01:25 +0000
@@ -158,7 +158,8 @@
158 retrierLock sync.Mutex158 retrierLock sync.Mutex
159 cookie string159 cookie string
160 // status160 // status
161 stateP *uint32161 stateLock sync.RWMutex
162 state ClientSessionState
162 // authorization163 // authorization
163 auth string164 auth string
164 // autoredial knobs165 // autoredial knobs
@@ -186,7 +187,6 @@
186func NewSession(serverAddrSpec string, conf ClientSessionConfig,187func NewSession(serverAddrSpec string, conf ClientSessionConfig,
187 deviceId string, seenStateFactory func() (seenstate.SeenState, error),188 deviceId string, seenStateFactory func() (seenstate.SeenState, error),
188 log logger.Logger) (*clientSession, error) {189 log logger.Logger) (*clientSession, error) {
189 state := uint32(Disconnected)
190 seenState, err := seenStateFactory()190 seenState, err := seenStateFactory()
191 if err != nil {191 if err != nil {
192 return nil, err192 return nil, err
@@ -207,7 +207,7 @@
207 Protocolator: protocol.NewProtocol0,207 Protocolator: protocol.NewProtocol0,
208 SeenState: seenState,208 SeenState: seenState,
209 TLS: &tls.Config{},209 TLS: &tls.Config{},
210 stateP: &state,210 state: Disconnected,
211 timeSince: time.Since,211 timeSince: time.Since,
212 shouldDelayP: &shouldDelay,212 shouldDelayP: &shouldDelay,
213 redialDelay: redialDelay,213 redialDelay: redialDelay,
@@ -238,12 +238,16 @@
238}238}
239239
240func (sess *clientSession) State() ClientSessionState {240func (sess *clientSession) State() ClientSessionState {
241 return ClientSessionState(atomic.LoadUint32(sess.stateP))241 sess.stateLock.RLock()
242 defer sess.stateLock.RUnlock()
243 return sess.state
242}244}
243245
244func (sess *clientSession) setState(state ClientSessionState) {246func (sess *clientSession) setState(state ClientSessionState) {
245 sess.Log.Debugf("session.setState: %s -> %s", ClientSessionState(atomic.LoadUint32(sess.stateP)), state)247 sess.stateLock.Lock()
246 atomic.StoreUint32(sess.stateP, uint32(state))248 defer sess.stateLock.Unlock()
249 sess.Log.Debugf("session.setState: %s -> %s", sess.state, state)
250 sess.state = state
247}251}
248252
249func (sess *clientSession) setConnection(conn net.Conn) {253func (sess *clientSession) setConnection(conn net.Conn) {

Subscribers

People subscribed via source and target branches