diff options
author | Alex Auvolat <alex@adnab.me> | 2020-03-13 10:49:42 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2020-03-13 10:49:42 +0100 |
commit | 6292303a31e9098e8803c9544fc0785023d526fd (patch) | |
tree | 756463ffc8565e0906a8709ff211f1ae906b33d7 | |
parent | 06929747d6ce8898e29e60fc3f53985416b5b1db (diff) | |
download | easybridge-6292303a31e9098e8803c9544fc0785023d526fd.tar.gz easybridge-6292303a31e9098e8803c9544fc0785023d526fd.zip |
Fix message duplication due to a race-condition
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | account.go | 3 | ||||
-rw-r--r-- | server.go | 4 |
3 files changed, 8 insertions, 0 deletions
@@ -2,3 +2,4 @@ easybridge config.json registration.yaml easybridge.db +__pycache__ @@ -453,6 +453,9 @@ func (a *Account) eventInternal(event *Event) error { var cache_key string if event.Id != "" { + 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) @@ -165,6 +165,10 @@ func handleTxnEvent(e *mxlib.Event) error { if acct != nil { ev.Author = acct.Conn.User() ev.Room = room.RoomID + + dbLockSlot(e.RoomId) + defer dbUnlockSlot(e.RoomId) + created_ev_id, err := acct.Conn.Send(ev) if err == nil && created_ev_id != "" { cache_key := fmt.Sprintf("%s/event_seen/%s/%s", |