Avoid occasionnal deadlocks (1 in 256)

This commit is contained in:
Alex 2020-03-13 11:29:03 +01:00
parent 6292303a31
commit ad8461491b
3 changed files with 9 additions and 9 deletions

View file

@ -453,17 +453,16 @@ func (a *Account) eventInternal(event *Event) error {
var cache_key string
if event.Id != "" {
// Use mx_room_id as a lock slot key, because this section is
// concurrent with the part that sends events out in server.go,
// and at that point we don't know the event's ID yet
// since it will be attributed by the backend during the call to send
dbLockSlot(mx_room_id)
defer dbUnlockSlot(mx_room_id)
// If the event has an ID, make sure it is processed only once
cache_key = fmt.Sprintf("%s/event_seen/%s/%s",
a.Protocol, mx_room_id, event.Id)
slot_key := dbKvSlotKey(cache_key)
dbLockSlot(slot_key)
defer dbUnlockSlot(slot_key)
if dbKvGet(cache_key) == "yes" {
// false: cache key was not modified, meaning we
// already saw the event

View file

@ -166,6 +166,7 @@ func handleTxnEvent(e *mxlib.Event) error {
ev.Author = acct.Conn.User()
ev.Room = room.RoomID
// use room id as lock slot key, see account.go in eventInternal
dbLockSlot(e.RoomId)
defer dbUnlockSlot(e.RoomId)
@ -173,7 +174,7 @@ func handleTxnEvent(e *mxlib.Event) error {
if err == nil && created_ev_id != "" {
cache_key := fmt.Sprintf("%s/event_seen/%s/%s",
room.Protocol, e.RoomId, created_ev_id)
dbKvPut(cache_key, "yes")
dbKvPutLocked(cache_key, "yes")
}
return err
} else {

View file

@ -27,15 +27,15 @@ func ezbrSystemRoom(user_mx_id string) (string, error) {
}
widget_kv_key := "ezbr_widget_on:" + mx_room_id
if config.WebURL != "" && dbKvTestAndSet(widget_kv_key, "yes") {
if config.WebURL != "" && dbKvGet(widget_kv_key) != "yes" {
widget := map[string]interface{}{
"type": "m.easybridge",
"url": config.WebURL,
"name": "Easybridge account configuration dashboard",
}
err = mx.PutStateAs(mx_room_id, "im.vector.modular.widgets", "ezbr_widget", widget, ezbrMxId())
if err != nil {
dbKvPut(widget_kv_key, "")
if err == nil {
dbKvPut(widget_kv_key, "yes")
}
}