bugfix: properly ending any thread and not generating seg fault when stopping smf process
After Robert and Sagar told me about segmentation faults from SMF, I spent a few hours investigating and fixing
udp_read_loop
Issue 1 : properly stopping the recvfrom
is a blocking call (at least in this usage) and closing the socket is not enough and wrong.
See https://linux.die.net/man/2/recvfrom and https://linux.die.net/man/2/shutdown
--> @schmidtr : That was the issue on avra
and cacofonix
itti_inst
prematurely
Issue 2 : deallocating itti_inst
is used in a lot of our code without any nullptr
check. So deallocating before the smf_app_inst
causes random segmentation faults (due to some race conditions).
--> @arora : I think it is what you see on a non-5.15 kernel Ubuntu22 host
itti timer thread
is finished before deallocating
Issue 3 : making sure with timer_thread.detach();
we have no control of when the thread ends.
with timer_thread.join();
then we really wait for it to be finished.
That is the most controversial fix --> it takes 2 to 3 seconds for the timer thread to be re-activated.
If you have a better idea, you're welcome.