1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00

Hold onto idleLock while we handle idle

This commit is contained in:
Daniel Barber 2020-02-15 21:10:58 -05:00
parent 2f59eaeecf
commit abf1579789
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8

View File

@ -27,9 +27,9 @@ extension MPDClient {
do {
idleLock.lock()
defer { idleLock.unlock() }
shouldIdle = (!self.isIdle && self.commandQueue.operationCount == 1) || force
shouldIdle = (!isIdle && commandQueue.operationCount == 1) || force
if shouldIdle {
mpd_send_idle(self.connection)
mpd_send_idle(connection)
self.isIdle = true
}
}
@ -37,19 +37,20 @@ extension MPDClient {
// noIdle could happen here which will crash
if shouldIdle {
let result = mpd_recv_idle(self.connection, true)
self.handleIdleResult(result)
let result = mpd_recv_idle(connection, true)
handleIdleResult(result)
}
}
func handleIdleResult(_ result: mpd_idle) {
let mpdIdle = MPDIdle(rawValue: result.rawValue)
do {
idleLock.lock()
defer { idleLock.unlock() }
isIdle = false
}
let mpdIdle = MPDIdle(rawValue: result.rawValue)
if isIdle {
isIdle = false
if mpdIdle.contains(.database) {
self.fetchAllAlbums()
@ -80,8 +81,11 @@ extension MPDClient {
self.delegate?.didFinishDatabaseUpdate(mpdClient: self)
}
}
if !mpdIdle.isEmpty {
self.idle()
}
}
}
}
}