libnice uses assert() as an exit path for failures
The existence of reports such as #94 (closed) and #95 (closed), plus others that probably haven't reached this repo, shows that bad state changes will happen during an ICE exchange, it's normal, bugs exist :-) for similar reasons, Kurento has historically kept a custom patch that disables crashing on the main state machine.
Throwing away a whole process with hundreds of streams and data flowing, just because one single ICE candidate's state happened to change in an unexpected way, doesn't seem like a very nice feature. Couldn't usages of
assert() (or derivatives) be changed to simply drop the affected candidates or candidate resolution processes? I'd rather have a failing connection on one user than a server crashing on 200 already successfully connected users when the user 201 tries to connect.
This report is not a bug per se, but a "code quality" improvement proposal, to see if libnice devs have similar ideas or on the contrary, strong arguments against this.
I'd also like to know opinions on whether custom building libnice defining
G_DISABLE_ASSERT to disable the g_assert macro is a recommended thing, or it would probably just cause mayhem when a bad state change occurs.