Stop server from leaking events (allocating & never freeing)

Solves #6843 by dropping the oldest event when the event list has reached it's capacity.
I think check `if len(srv.events) == cap(srv.events)` should be first, because this case is much more often, then `len(srv.events) < cap(srv.events)`
Also, could you pls make `srv.Unlock()` at the end instead of `defer srv.Unlock()`?