CCTK_VInfo, CCTK_VWarn, and CCTK_VError use static variables. This is not thread-safe. These functions should be wrapped with an OpenMP critical pragma.
This is not only an issue for CCTK_Warn like functions. Right now nothing in Cactus is guaranteed to be thread safe, since even read only access to shared structures such as the list of warning callbacks or the list of Cactus timers would need protections since those structures can change at runtime.
So far it has been the client code’s responsibility to wrap CCTK_VWarn and the like in omp critical sections. This is useful in particular in Fortran code where multiple CCTK_Warn are used to make up a single error message (and that message should show up as one block and not intermixed by other threads).
This specific case of static variables is addressed in #2322 which is up for review. Even without static variables a critical is a good idea b/c of the list of callbacks being traversed (it is dynamic) and there being multiple fprintf calls in this function.