Most likely your code had a bug somewhere. Nothing within uthash itself prevents using two disjoint hash tables from two different threads simultaneously.
Of course it would cause a data race to read and write the same hash table from two different threads simultaneously, but you say you weren't doing that (at least not intentionally).
You might want to closely examine your code's use of `malloc` and `free`; for example, is it possible that you were accidentally accessing `p->some_data` after having called `free(p)`? That would generally "seem to work" in a single-threaded program, but possibly fail in a multithreaded program (if the block pointed to by `p` were already reallocated by a call to `malloc` in another thread, and modified by that thread).
Of course if you do come up with a reproducer, I'm happy to take a look. Post it here or (preferably)
as a GitHub issue.
–Arthur