forked from MirrorHub/mautrix-whatsapp
Don't start new post-login sync if old one is still in progress
This commit is contained in:
parent
af0fd279d2
commit
9a6d9f0383
1 changed files with 9 additions and 3 deletions
12
user.go
12
user.go
|
@ -26,6 +26,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/skip2/go-qrcode"
|
"github.com/skip2/go-qrcode"
|
||||||
|
@ -72,6 +73,7 @@ type User struct {
|
||||||
|
|
||||||
syncStart chan struct{}
|
syncStart chan struct{}
|
||||||
syncWait sync.WaitGroup
|
syncWait sync.WaitGroup
|
||||||
|
syncing int32
|
||||||
|
|
||||||
mgmtCreateLock sync.Mutex
|
mgmtCreateLock sync.Mutex
|
||||||
connLock sync.Mutex
|
connLock sync.Mutex
|
||||||
|
@ -462,10 +464,13 @@ func (user *User) PostLogin() {
|
||||||
user.sendBridgeStatus(AsmuxPong{OK: true})
|
user.sendBridgeStatus(AsmuxPong{OK: true})
|
||||||
user.bridge.Metrics.TrackConnectionState(user.JID, true)
|
user.bridge.Metrics.TrackConnectionState(user.JID, true)
|
||||||
user.bridge.Metrics.TrackLoginState(user.JID, true)
|
user.bridge.Metrics.TrackLoginState(user.JID, true)
|
||||||
user.bridge.Metrics.TrackBufferLength(user.MXID, 0)
|
user.bridge.Metrics.TrackBufferLength(user.MXID, len(user.messageOutput))
|
||||||
|
if !atomic.CompareAndSwapInt32(&user.syncing, 0, 1) {
|
||||||
|
// TODO we should cleanly stop the old sync and start a new one instead of not starting a new one
|
||||||
|
user.log.Warnln("There seems to be a post-sync already in progress, not starting a new one")
|
||||||
|
return
|
||||||
|
}
|
||||||
user.log.Debugln("Locking processing of incoming messages and starting post-login sync")
|
user.log.Debugln("Locking processing of incoming messages and starting post-login sync")
|
||||||
// TODO can an old sync still be ongoing when PostLogin is called again?
|
|
||||||
// TODO 2: can the new sync happen before this happens?
|
|
||||||
user.chatListReceived = make(chan struct{}, 1)
|
user.chatListReceived = make(chan struct{}, 1)
|
||||||
user.syncPortalsDone = make(chan struct{}, 1)
|
user.syncPortalsDone = make(chan struct{}, 1)
|
||||||
user.syncWait.Add(1)
|
user.syncWait.Add(1)
|
||||||
|
@ -543,6 +548,7 @@ func (user *User) postConnPing() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) intPostLogin() {
|
func (user *User) intPostLogin() {
|
||||||
|
defer atomic.StoreInt32(&user.syncing, 0)
|
||||||
defer user.syncWait.Done()
|
defer user.syncWait.Done()
|
||||||
user.lastReconnection = time.Now().Unix()
|
user.lastReconnection = time.Now().Unix()
|
||||||
user.createCommunity()
|
user.createCommunity()
|
||||||
|
|
Loading…
Reference in a new issue