This seems like a totally random behavior. I use thread local storage as a context source that's set at the very beginning of the application, unfortunately calling SDL_Init flushes that entirely, not even calling the destructor that was set.
All SDL threading functionality works as expected without calling SDL_Init first, so I didn't think it was a requirement. Am I doing something wrong?