Describe the bug
Groot2Publisher can enter an infinite loop in certain failure scenarios (e.g., when an exception is thrown).
During destruction, active_server is set to false to stop the server loop. However, when server_thread.join() is called, active_server may be reset to true (depending on which line the server loop is currently executing), causing the server loop to continue running indefinitely and preventing the destructor from completing.