diff --git a/.gitignore b/.gitignore index f4f15a6..3aa79fd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ easybridge config.json registration.yaml easybridge.db +__pycache__ diff --git a/account.go b/account.go index 7071397..b0313a4 100644 --- a/account.go +++ b/account.go @@ -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) diff --git a/server.go b/server.go index b982e15..1654971 100644 --- a/server.go +++ b/server.go @@ -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",