Нужно блокировать вызовы UDP, пока обрабатывается критическая
секция TCP. Посмотрите, что происходит в библиотеке для TCP и попробуйте защищать разные фазы работы как критические секции. Возможно, нужно защитить совсем небольшой кусочек, который использует ту же функцию и тот же аллокатор, что и UDP.
Ну и навскидку: не вызываете ли, случайно, передачу UDP из прерывания приоритетом выше, чем сам стек LWIP?